Füllen von UDF-Feldern, die in einem eigenen Folder plaziert sind
Heiko Merz
Hallo zusammen,wir haben in einigen Dokumenten zuviele UDF-Felder und wollen diese nun in einem separaten Folder sichtbar machen und rechts in den UDF's ausblenden.
(Siehe Bild1.jpg). Wie man sieht haben wir 5 Felder, die es rechts in den UDF's gibt, in den neuen Folder kopiert. Nun möchte ich die Felder rechts ausblenden, nur wie sage ich dem System, dass er die Felder nun nicht mehr im UDFForm füllen soll, sondern in dem Folder "User defined fields" ? ? ?
In dem Beispiel aus Bild 1 habe ich mal das Feld "Acknowledgment" rechts in den UDF's ausgeblendet.
Systeminfo für das Feld: (
Form = 139, Item = JRSTXT1 Pane = 76 Variable = 1 ORDR,U_JRS_TEXT1)
Systeminfo für den Folder:
8 [Form = 139, Item = COR_F3, Pane = 0, Variable = 208]
Gefüllt wird das ganze über einen Extended Code, der folgendermaßen aussieht:
(Fett markiert die wichtigen Stellen, fett und kursiv das, was ich probiert habe).
**************
public void FillValuesToDocumentHeader(Form form, string cardCode, string cardName, bool onlyAdress)
{
try
{
form.Select();
form.UDFForm.Visible = true;
if(form != null)
form.UDFForm.Freeze(true);
if(onlyAdress)
{
USW....
}
else
{
// GET ADDITIONAL INFORMATION FROM THE BUSINESS PARTNER
SqlCommand cmdCardCode = new SqlCommand();
cmdCardCode.CommandText = @"SELECT
U_JRS_BP_OLD,
U_JRS_FORM,
U_JRS_BRANCH,
U_JRS_SHIPAD,
U_JRS_DELCON,
U_JRS_DISPAT,
U_JRS_MAINACC,
U_JRS_TEXT1,
U_JRS_TEXT2,
U_JRS_TEXT3,
U_JRS_TEXT4,
U_JRS_TEXT5,
U_JRS_CUSTTEXT,
U_JRS_DEFFWD
FROM OCRD
WHERE CardCode=@cardCode OR CardName=@cardName";
cmdCardCode.Parameters.AddWithValue("@cardCode", cardCode);
cmdCardCode.Parameters.AddWithValue("@cardName", cardName);
using(SqlDataReader sdr = SwissAddonFramework.B1Connector.GetB1Connector().ExecuteQuery(cmdCardCode))
{
if(sdr.Read())
{
string fieldToShow = "";
// FILL VALUES TO DOCUMENT
TextEdit.GetFromUID(form.UDFForm, "U_JRS_BP_OLD").Value = sdr["U_JRS_BP_OLD"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_FORM").Value = sdr["U_JRS_FORM"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_BRANCH").Value = sdr["U_JRS_BRANCH"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_SHIPAD").Value = sdr["U_JRS_SHIPAD"].ToString();
ComboBox.GetFromUID(form.UDFForm, "U_JRS_DELCON").Value = sdr["U_JRS_DELCON"].ToString();
ComboBox.GetFromUID(form.UDFForm, "U_JRS_DISPAT").Value = sdr["U_JRS_DISPAT"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_MAINACC").Value = sdr["U_JRS_MAINACC"].ToString();
//TextEdit.GetFromUID(form.UDFForm, "U_JRS_TEXT1").Value = sdr["U_JRS_TEXT1"].ToString();TextEdit.GetFromUID[u](form.UDFForm, "JRSTXT1").Value = sdr["U_JRS_TEXT1"].ToString();[/u]
TextEdit.GetFromUID(form.UDFForm, "U_JRS_TEXT2").Value = sdr["U_JRS_TEXT2"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_TEXT3").Value = sdr["U_JRS_TEXT3"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_TEXT4").Value = sdr["U_JRS_TEXT4"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_TEXT5").Value = sdr["U_JRS_TEXT5"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_CUSTTEXT").Value = sdr["U_JRS_CUSTTEXT"].ToString();
TextEdit.GetFromUID(form.UDFForm, "U_JRS_DEFFWD").Value = sdr["U_JRS_DEFFWD"].ToString();
}
else
{
StatusBar.WriteError("No information for this business partner: " + cardCode);
}
}
}
finally
{
form.UDFForm.Freeze(false);
}
}
*************************
Kann mir jemand weiterhelfen ? Wie schaffe ich es das ich die Felder nun in dem neuen Folder fülle und nicht mehr in den UDF's, damit ich diese dann rausmachen kann ?
Gruß
Heiko
Sascha Balke
Hallo Heiko,leider ist deine Anlage nicht vorhanden.
Wenn ich es grad richtig sehe, sprichst du direkt die "...UDFForm..." an und hier liegt auch die Ursache, in deinem Problem, begründet.
Ich würde es so machen, dass die entsprechenden Felder einen Alias, für das jeweilige UDF bekommen und die gewünschten Werte mit diesem verknüpfen/füllen.
Ähnlich wie du es auch mit den New Items realisieren kannst.
hth
Heiko Merz
Tja, warum das mit der Anlage nicht klappt, weiss ich nicht.Die Vorschau sehe ich, aber runterladen kann ich sie nicht.
Komisch.
Nu ja, danke auf jeden Fall.
Ich habe es mit einer eigenen Optimizer-Regel gelöst, dann klappt es.
Merci.
Sascha Balke
Hallo Heiko,schön das du es via Optimizer lösen konntest.
Rein aus Neugierde: Wie hast du es genau realisiert?
Heiko Merz
Hallo Sascha,mit einer Regel ("CSCODE", "VALIDATE", Formtype "139", ItemUID "4", Event "Value Changed", Form Mode "All") und folgendem Code:
try
{
string cardCode = TextEdit.GetFromUID(pVal.Form, "4").Value;
SqlCommand cmdUDF = new SqlCommand();
cmdUDF.CommandText = @"SELECT
U_JRS_TEXT1 AS 'TEXT1',
U_JRS_TEXT2 AS 'TEXT2',
U_JRS_TEXT3 AS 'TEXT3',
U_JRS_TEXT4 AS 'TEXT4',
U_JRS_TEXT5 AS 'TEXT5',
U_JRS_CUSTTEXT AS 'POP'
FROM OCRD
WHERE CardCode=@cardCode";
cmdUDF.Parameters.AddWithValue("@cardCode", cardCode);
using(SqlDataReader sdr = SwissAddonFramework.B1Connector.GetB1Connector().ExecuteQuery(cmdUDF))
{
if(sdr.Read())
{
string text1 = sdr["TEXT1"].ToString();
string text2 = sdr["TEXT2"].ToString();
string text3 = sdr["TEXT3"].ToString();
string text4 = sdr["TEXT4"].ToString();
string text5 = sdr["TEXT5"].ToString();
string pop = sdr["POP"].ToString();
//if(!string.IsNullOrEmpty(text1))
{
// FILL VALUES TO FOLDER
TextEdit.GetFromUID(pVal.Form, "JRSTXT1").Value = text1;
TextEdit.GetFromUID(pVal.Form, "JRSTXT2").Value = text2;
TextEdit.GetFromUID(pVal.Form, "JRSTXT3").Value = text3;
TextEdit.GetFromUID(pVal.Form, "JRSTXT4").Value = text4;
TextEdit.GetFromUID(pVal.Form, "JRSTXT5").Value = text5;
TextEdit.GetFromUID(pVal.Form, "JRSPOP").Value = pop;
}
}
}
}
catch(System.Exception ex)
{
MessageBox.Show("Error while filling the values to the document header: " + ex.Message, "OK");
}
return true;
Gruß
Heiko
Stefan Berger
Wir nutzen die NewItems für alle FormTypes - also Auftrag, Lieferschein, Rechnung, Gutschrift, Bestellung usw. ==> siehe ScreenshotProblem ist jetzt, daß wir als Source direkt ORDR und Alias U_JRS_TEXT1 angegeben haben ==> dies funktioniert wunderbar im Auftrag
Gehe ich jetzt in Lieferschein, dann brauche ich als Source nicht ORDR sondern ODLN !??!?
Wie kann ich das Global in einer Regel definieren, ohne daß ich für alle Belege eine NewItem-Regel erstellen muß???
Habe es schon mit O@@RDR probiert, aber funktioniert nicht. Gibt es hier was ähnliches wie bei den Druckquery´s was ich nutzen kann?
Danke!
Gruß
Stefan
Attachment
[url=http://www.coresystems.ch/wp-content/../wp-content/forum-image-uploads/berger-web/NewItems.jpg]NewItems.jpg[/url]
Manuel Marhold
DBDataSources.Item(0).TableName ist anscheinend immer die Kopftabelle des Dokuments.
0
Please sign in to leave a comment.
Comments
0 comments