Laden...
C
corax02 myCSharp.de - Member
staatl. gepr. Assisten f. Softwaretechnologie Magdeburg Dabei seit 03.01.2008 14 Beiträge
Benutzerbeschreibung

Forenbeiträge von corax02 Ingesamt 14 Beiträge

01.07.2020 - 16:09 Uhr

vielen Dank für die schnelle Antwort. Ich schau mir mal den Link an und geb ne Rückmeldung..

-edit-

Wie versprochen, meine Rückmeldung:
In der Tat entspricht der Inhalt des Links ziemlich genau dem, was ich benötige. Ich muss da nur noch ein wenig basteln, da diese Anleitung sich auf das Azure Git bezieht und wir hier ein hausinternes GitLab nutzen. Da werden die YAML Dateien in den Projekten nicht erkannt.

01.07.2020 - 15:49 Uhr

Hallo,
ich hab die Aufgabe bekommen, auf unseren lokalen Azure DevOps Server Build- sowie Release Pipelines einzurichten. Generell funktionieren die Pipelines für ein Großteil der Projekte. An einem Projekt scheitere ich aber gerade und benötige mal einen Schubs in die richtige Richtung.

Gegeben ist eine Solution, welche mehrere Projektmappen enthält. Dabei soll jede Projektmappe für sich selber gebaut werden. (Diesen Part habe ich schon, und funktioniertiert soweit).
An dieser Struktur kann ich so auch nichts ändern, wodurch ich aber nun dennoch scheitere:

Es soll nur das Projekt gebaut und released werden, für das auch Änderungen hoch geladen wurden. Aktuell habe ich den Effekt, dass alle Projekte gebaut und released werden, auch wenn nur in einem Projekt Änderungen vorgenommen werden. Ich bin nun mit meinem Latein am Ende und hoffe auf eine zündende Idee, wie ich meine Build- und Release Pipeline aufbauen muss, dass es so funktioniert.
Meine Idee, jedes Projekt in ein separates Branch zu packen, wurde abgelehnt.

27.05.2019 - 21:38 Uhr

Ich hoffe ich kann es hier ein bißchen aufdrößeln:

Die Quellen der Daten sind auf einer Seite eine MS SQL Tabelle, auf der anderen Seite mehrere CSV Dateien. Dies ist leider so vorgegeben. Der SQL Server bedient hier ein hauseigenes ERP System. Die CSV Dateien kommen von einem größeren Vertriebskanal (dies kann ich leider nicht beeinflussen).

Irgendwann vor kurzer Zeit wurde eingeführt, das neue Datensätze in der Datenbank einen Hash-Wert verpasst bekommen (ebenfalls in der Tabelle enthalten). Ich soll nun dafür sorgen, dass
a) die alten Daten in der Tabelle ebenfalls einen Hashwert bekommen
b) noch nicht importierte Daten aus den CSV Dateien in die Tabelle geschrieben werden.

Die Daten, welche in die Tabelle geschrieben werden sollen, muss ich erst in eine CSV Datei schreiben, da mit ein direkter Import in die Tabelle untersagt ist (dafür gibt es ein hauseigenes Framework).

Das Tabellenschema ist soweit klar, die CSV Dateien können aber in 4 unterschiedlichen Formaten auftauchen (der Vertriebskanal ändert des öfteren mal das Format, was wir leider nicht beeinflussen können).

Meine Idee war wie folgt:

  1. Daten der Tabelle in Liste A, Alle CSV-Daten in Liste B
  2. Daten in der Liste A mit den Daten der Liste B vergleichen
  3. unvollständige Daten (z.B.: Liste A) mit den zugehörigen Daten aus Liste B auffüllen und neuen Hashwert anhängen
  4. Doppelte Einträge aus der Liste entfernen
  5. Liste in eine CSV Datei schreiben

Wie üblich, interne Dokumentation leider == null

Kann auch durchaus sein, dass ich hier gerade einen vollkommen falschen Weg laufe, Hinweise nehm ich da gern entgegen 😃

27.05.2019 - 14:35 Uhr

Wenn es sich nur um eine Property handelt, die primör gemerged werden muss, kann man mit Linq einfach nen left join machen.
Wenn da mehr Logik rein muss, weil es viele Properties mit spezifischer Logik sind; dann kommt man um ein manuelles mergen nicht drum herum.

Im ungünstigsten Fall müssen bis zu 14 Properties gemergt werden, was das ganze leider recht aufwendig macht.

@panicJonny
@T-Virus
Vielen Dank schon einmal für das "In die Richtung schubsen".

27.05.2019 - 12:01 Uhr

Hallo,
ich hab gerade nen ziemlichen hänger in meinen Gedanken (und dadurch unter umständen auch nicht das richtige in der Suche gefunden).

Ich habe ein Model-Klasse "Bestellung"


public class Bestellung
{
public string Bestellnummer{get;set;}
public DateTime? Bestelldatum{get;set;}
public int? StkZahl{get;set;}
public DateTime? RetoureDate{get;set;}
public string Name{get;set;}
}

dazu habe ich zwei Listen


var ListA = new List<Bestellung>();
var ListB = new List<Bestellung>();

ListA wird mit Daten aus der Datenbank befüllt (funktioniert)
ListB wird mit Daten aus mehreren CSV Dateien befüllt (funktioniert)

Mein aktuelles Problem, wo ich gedanklich gerade nicht weiter komme, ist die Zusammenführung beider Listen.
Beispiel:
in ListA:
Bestellnummer 0001
Lieferdatum 12.01.19
Stückzahl 3
Rücksendedatum
Name Mustermax

in ListB:
Bestellnummer 0001
Lieferdatum 12.01.19
Stückzahl 3
Rücksendedatum 18.01.19
Name Mustermax

zusammengeführt soll heraus kommen (z.b.: in ListC)
Bestellnummer 0001
Lieferdatum 12.01.19
Stückzahl 3
Rücksendedatum 18.01.19
Name Mustermax

Wichtig dabei ist, dass es in beide Richtungen und mit mehreren Feldern funktionieren muss. D.h. wenn in ListB der Name fehlt, soll dieser aus ListA genommen werden. Dabei darf der Datensatz nur einmal im Ergebnis auftauchen.

Mir fehlt gerade jeder Umsetzungsansatz und bräuchte mal ein paar Ideen.
Mit Concat und Union bin ich bisher nicht zu den gewünschten Ergebnis gekommen. Den original-Quelltext kann ich leider nicht posten, daher dieses einfache Beispiel (sorry)

07.12.2012 - 11:05 Uhr

nur kurz für mein Verständnis:
der Spalte "d20" weißt due den Parameter ":jetzt" zu.

aber was versucht du mit der Zeile:
cmd.Parameters.Add(":d20", OleDbType.Date, 32).Value = DateTime.Now.ToString();

den Parameter ":d20" konnte ich nicht finden. Kann es sein, das es da schon auf die Nase fällt und dadurch die Folgewerte nicht richtig übernimmt?

07.12.2012 - 09:46 Uhr

verwendetes Datenbanksystem: <XML>

Hallo,
ich bastel gerade an einem Windows Service, welcher im Hintergrund eine XML Datei einlesen und verarbeiten soll. Nun habe ich dabei das Problem, das der XML Reader mir im WindowsService sagt, dieser sei leer (womit das einlesen fehlschlägt).
Die Datei liegt aber an dem angegebenen Ort. Also habe ich die Funktion einmal genommen und in ein Consolen-Projekt gepackt, und siehe da, die XML wird einwandfrei eingelesen und mir im Consolenfenster angezeigt.
Der C#-Quellltext:


        public static void readInterface()
        {
            XmlReader InterfaceReader = XmlReader.Create(@"C:\Schnittstellen\OTRS_Status.xml");
            List<InterfaceValue> ticketliste = new List<InterfaceValue>();
            InterfaceValue _interfacevalue = null;
            while (InterfaceReader.Read())
            {
                if (InterfaceReader.NodeType == XmlNodeType.Element) //Hier tritt der Fehler auf
                {
                    switch (InterfaceReader.Name)
                    {
                        case "Datensatz":
                            _interfacevalue = new InterfaceValue();
                            if (InterfaceReader.HasAttributes)
                            {
                                InterfaceReader.MoveToAttribute("Ticketnummer");
                                _interfacevalue.ticketnummer = InterfaceReader.Value;
                            }
                            ticketliste.Add(_interfacevalue);
                            break;
                        case "Team":
                            _interfacevalue.team = InterfaceReader.ReadString();
                            break;
                        case "StatusNo":
                            _interfacevalue.status = InterfaceReader.ReadString();
                            break;
                        case "Betreff":
                            _interfacevalue.betreff = InterfaceReader.ReadString();
                            break;

                    }
                }
            }
            InterfaceReader.Close();
            GetList(ticketliste); //hier aufruf einer externen Funktion zur Anzeige in der Console, im Service Aufruf der Funktion für Weiterverarbeitung
            Console.ReadLine();//im Service nicht vorhanden
        }

Die XML Datei sieht wie folgt aus


<?xml version="1.0" encoding="UTF-8"?>
<InterfaceToOTRS>
	<Datensatz Ticketnummer="57003713">
		<Team>Int/MD</Team>
		<StatusNo>70</StatusNo>
		<Betreff>erstes</Betreff>
	</Datensatz>
	<Datensatz Ticketnummer="57003714">
		<Team>Pu/PC</Team>
		<StatusNo>50</StatusNo>
		<Betreff>zweites</Betreff>
	</Datensatz>
	<Datensatz Ticketnummer="57003715">
		<Team>Int/MD</Team>
		<StatusNo>50</StatusNo>
		<Betreff>drittes</Betreff>
	</Datensatz>
	<Datensatz Ticketnummer="57003716">
		<Team>Test/UHD/DWH</Team>
		<StatusNo>85</StatusNo>
		<Betreff>viertes</Betreff>
	</Datensatz>
	<Datensatz Ticketnummer="57003717">
		<Team>Sa/Inv</Team>
		<StatusNo>65</StatusNo>
		<Betreff>fünftes</Betreff>
	</Datensatz>
	<Datensatz Ticketnummer="57003718">
		<Team>Test/UHD/DWH</Team>
		<StatusNo>85</StatusNo>
		<Betreff>sechstes</Betreff>
	</Datensatz>
	<Datensatz Ticketnummer="57003719">
		<Team>Test/UHD/DWH</Team>
		<StatusNo>85</StatusNo>
		<Betreff>siebentes</Betreff>
	</Datensatz>
</InterfaceToOTRS>

Zu guter letzt nooch die Fehlermeldung:

Fehlermeldung:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei OTRSUpdate.otrsupdate.readInterface(Object source, ElapsedEventArgs e)

Der Quelltext im Service ist nur Minimal angepasst:*Funktion ist im Service nicht static *Funktion bekommt im Service durch das Tick-Ereignis bedingt noch Object source und ElapsedEventArgs e übergeben *Funktion ruft keine externe Funktion für die Ausgabe auf in der Console auf sondern eine Funktion für die Weiterverarbeitung.

Ansonsten ist die Funktion identisch.

Wie oben schon beschrieben, funktioniert der Quelltext im Console-Programm, aber nicht im Windows-Service. Meine Frage dazu: Muss ich irgendwas bestimmtes beachten, was ich hier übersehen habe? Wenn ja, was?
Dem Service habe ich vollzugriff auf den Ordner und alle darin liegenden Dateien gegeben. Nun gehen mir die Ideen aus. 🙁

Ich konnte zumindest schon eingrenzen, das der WindowsService an der Stelle"if (InterfaceReader.NodeType == XmlNodeType.Element)" aussteigt.

02.10.2012 - 10:28 Uhr

verwendetes Datenbanksystem: <MySQL Server 5.5>
Hallo,
nachdem das Forum mit schon lange geholfen hat, muss ich auch mal eine Frage stellen.
Hintergrundinformation dabei ist:
Ein Ticketsystem verwendet eine MySQL Datenbank. Einige Tickets (nicht alle) sollen dabei in ein anderes System übertragen werden. Hierfür wurde von der Obrigkeit ein WindowsService vorgesehen, den ich entwickeln soll. Das Übertragungsformat ist dabei XML.
Nun funktioniert mein Service soweit schon, das es die MySQL Datenbank auf Ticket prüft (in regelmäßigen abständen) die übertragen werden sollen. Der Service zieht auch sämtliche Daten eines Tickets heraus und erstellt daraus eine XML-Datei namens Schnittstelle.xml.
Nun können aber zu jedem Ticket Dateianhänge existerieren. Leider sind dieser auch verschiedener Natur (Excel-, PDF-, Bild-Dateien etc). Zudem können zu einem Ticket auch mehrere Dateien existieren. Diese Dateien müssen selbstverständlich auch mit in das andere System übertragen werden. Und da komme ich momentan nicht weiter. Wunsch ist, dass der Service die Dateien aus der Datenbank herausholt, diese an einem bestimmten Speicherort hinterlegt und dabei die Ticketnummer vor den eigentlichen Dateinamen hängt.
Dabei brauche ich nun Hilfe, ich hab keine Ahnung, wie ich die Attachments aus der Datenbank bekomme und in eine Datei schreiben kann.
Anbei einmal der Quellcode. Wäre nett, wenn ihr mir zeigen und erklären könnt, wo und wie ich was ansetzen muss, damit ich dies hinbekomme.


        private void Tick_Elapsed(object source, ElapsedEventArgs e)
        {
            //Aktuelles Datum holen, 
            string newDatum = AdjustPath(DateTime.Now.ToShortDateString());
            string newDatname = newDatum + logdat;
            
            //Wenn Logdatei mit aktuellem Datum existiert
            if (File.Exists(logpath + newDatum + "_"+logdat))
            {
                //Wenn schnittstelle.xml nicht existiert
                if (!File.Exists(interfacepath + "Schnittstelle.xml"))
                {
                    bool neuedaten = false;
                    db = new MySqlConnection("SERVER=" + connection + ";DATABASE=" + database + ";UID=" + login + ";PASSWORD=" + loginpw + ";");
                    MySqlCommand command = db.CreateCommand();
                    command.CommandText = DBabfrage;
                    MySqlCommand command2 = db.CreateCommand();
                    MySqlDataReader reader;

                    try
                    {
                        List<string> ticketnummer = new List<string>();
                        db.Open();
                        logen(ErrorLog.DBConnectionOK);

                        reader = command.ExecuteReader();

                        XmlDocument doc = new XmlDocument();
                        XmlNode myRoot, myChild, myChild2;
                        XmlAttribute myAttribut;
                        myRoot = doc.CreateElement("InterfaceToAX");
                        doc.AppendChild(myRoot);

                        while (reader.Read())
                        {

                            if (reader.GetValue(6).ToString() == "1")
                            {

                                myChild = doc.CreateElement("Datensatz");
                                myAttribut = doc.CreateAttribute("Ticketnummer");
                                myAttribut.InnerText = reader.GetValue(1).ToString();
                                myChild.Attributes.Append(myAttribut);

                                ticketnummer.Add(reader.GetValue(1).ToString());
                                logen(ErrorLog.Ticketnummer, reader.GetValue(1).ToString());

                                myAttribut = doc.CreateAttribute("uebertragen");
                                myAttribut.InnerText = reader.GetValue(6).ToString();
                                myChild.Attributes.Append(myAttribut);

                                myChild2 = doc.CreateElement("TicketPrio");
                                myChild2.InnerText = reader.GetValue(2).ToString();
                                myChild.AppendChild(myChild2);

                                myChild2 = doc.CreateElement("RepRelease");
                                myChild2.InnerText = reader.GetValue(3).ToString();
                                myChild.AppendChild(myChild2);

                                myChild2 = doc.CreateElement("Team");
                                myChild2.InnerText = reader.GetValue(4).ToString();
                                myChild.AppendChild(myChild2);

                                myChild2 = doc.CreateElement("PSP");
                                myChild2.InnerText = reader.GetValue(5).ToString();
                                myChild.AppendChild(myChild2);

                                myChild2 = doc.CreateElement("Betreff");
                                myChild2.InnerText = reader.GetValue(7).ToString();
                                myChild.AppendChild(myChild2);

                                myChild2 = doc.CreateElement("TicketBody");
                                myChild2.InnerText = reader.GetValue(8).ToString();
                                myChild.AppendChild(myChild2);

                                myChild2 = doc.CreateElement("Kundenname");
                                myChild2.InnerText = reader.GetValue(9).ToString() + ", " + reader.GetValue(10).ToString();
                                myChild.AppendChild(myChild2);
                                //ToDo: Hier schleife für 0-x Attechment-Verweise in Schnittstellen.xml
                                myRoot.AppendChild(myChild);
                                neuedaten = true;
                            }
                        }
                        reader.Close();
                        if (neuedaten)
                        {
                            foreach (string a in ticketnummer)
                            {
                                //Markierung in DB das Daten erfolgreich in XML-Datei geschrieben wurden
                                DBupdate = "UPDATE `otrs_tes`.`ticket` SET `isExported`=1 WHERE `tn`='" + a + "'";

                                command2.CommandText = DBupdate;
                                command2.ExecuteNonQuery();
                            }


                            try
                            {
                                doc.Save(interfacepath + "Schnittstelle.xml");
                                logen(ErrorLog.WriteInterfaceOK);
                            }
                            catch
                            {
                                logen(ErrorLog.WriteInterfaceError);
                            }
                        }
                        else
                        {
                            logen(ErrorLog.DBNOData);
                        }
                        db.Close();
                        logen(ErrorLog.DBConnectionCloseOK);
                    }
                    catch (MySqlException ex)
                    {
                        logen(ErrorLog.DBConnectionError, ex.ToString());
                    }
                }
                else
                {
                    //Wenn Schnittstellendatei noch existiert
                    logen(ErrorLog.InterfaceExists);
                }
            }
            else
            {
                readconfigxml();
            }
        }

27.08.2008 - 14:11 Uhr

mein erster Rechner:
ein war ein "KC-87".
Den gab es damals noch als Bausatz. Als Speichermedien dienten Audiokasetten. keine ahnung wieviel MHz der hatte.

21.08.2008 - 21:21 Uhr

ich glaube das er nicht verstanden hat, das es keinen gewinn bringt wenn zwei gleiche nebeneinander sind, aber nicht ganz links stehen.

asso, dabei hatte ich das extra in der Spielanleitung mit reingeschrieben.

Folgende Dinge werde ich demnächst noch im Programm ändern:

die folgenden Punkte von JuyJuka werde ich übernehmen
->Tabreihenfolge anpassen
->verbleibende Laufzeit der Kredite anzeigen

Zusätzlich möchte ich noch einbinden/ändern:
->Rollphase der Bilder verlängern
->Stop-Buttons einbinden
->setzen von Guthaben über Buttons (25,50,100,500)

LG

der co

21.08.2008 - 21:03 Uhr

Hallo gobbo,

ich kann leider den fehler, den du beschreibts, nicht reproduzieren. bei mir läuft es so wie es soll, egal wieviele testläufe ich da durch nehme.

hat vllt noch ein anderer diesen Fehler?

LG

der co

21.08.2008 - 01:13 Uhr

Der Einsatz für das Spiel wird dir trotzdem abgezogen, daraus ergibt sich als Beispiel folgendes:

500 Guthaben->50 setzen= 450 Guthaben übrig
2 bilder nebeneinander= 50*10+450->Guthaben neu 950

Müsste eigentlich so stimmen, oder hab ich einen Denkfehler drin?

Die Polizei hab ich mit eingebaut, damit es nicht zu langweilig wird...Sie erscheint in einer durch zufallsgenerator ermittelten runde...immer wieder und wieder.

LG

der co

20.08.2008 - 23:47 Uhr

Hallo JuyJuka

danke für die Vorschläge, werde ich die Tage mal umsetzen

LG

der co
anbei ein Screenshot

20.08.2008 - 23:10 Uhr

Hallo Leute,

ich habe mich auch einmal an die Spieleprogrammierung gewagt. Als erstes Projekt habe ich dabei einen einarmigen Banditen programmiert, mit der Zusatzfunktion das, wenn man kein Guthaben mehr hat, sich bei der Bank Guthaben leihen kann und nach einer gewissen Rundenzahl mit Zinsen zurückzahlen muss.
Ab und an schaut auch die Polizei vorbei und erwischt einen beim illegalen Glückspiel und schon muss man Strafe zahlen.

Ist nicht gerade so toll geworden, aber ich wollte euch mein erstes Projekt nicht vorenthalten.

Eure Meinung interessiert mich dabei auch. Gern nehme ich auch Verbesserungsvorschläge an.

LG

der co