Skip to main content

Textzeile in einem Belegformular anlegen

Comments

1 comment

  • Manuel Ketisch

    Hallo ich habe ein sehr ähnliches Problem.

    Ich habe für das Form: 133 (Ausgangsrechnung) eine optimizer Regel angelegt. Über diese Regel füge ich beim Form.Load einen Button hinzu. 

    Wird dieser Button ausgelöst, sollen zur Ausgangsrechnung automatisch Zeilen hinzugefügt werden, und zwar: 

    1x Textzeile (diese dient quasi als Überschrift für die vier folgenden Artikelzeilen)
    4x Artikelzeilen
    1x Zwischensumme

    Jetzt ist es jedoch genau wie oben bereits beschrieben. 
    Eine Zeile mittels:

    matrix.SetValue("257", rowCount, "T"); 

    ...hinzuzufügen, resultiert darin, das sich unmittelbar darauf ein Texteditor öffnet. 
    Ein direktes editieren dieser Textzeile z.B.:

    matrix.SetValue("1", rowCount, "Test 1, 2, 3");

    ...ist leider nicht möglich und resultiert in einem Fehler.
    Ich habe dann über die in diesem Thread beschriebene 'SAPbobsCOM' (SAP Business One DI API COM library) versucht das Problem zu Lösen und diesen Texteditor zu umgehen, allerdings funktioniert das nicht. Was wohl daran liegt, dass diese library dazu gedacht ist, von außerhalb auf SAP zuzugreifen. Ich bin aber bereits in einem generierten Form in SAP und möchte lediglich einer Ausgangsrechnung mittels Button.Click einen vordefinierten Baustein hinzufügen.

    Hat hier jemand eine Idee, wie man eventuell diesen Texteditor anspricht der sich unweigerlich öffnet? Eventuell ist es ja möglich, diesem Editor eine Textzeile in sein Textfeld zu injizieren und einen Event auszulösen, welcher den Klick auf den OK Button zum übertragen des Textes an die Textzeile simuliert?

    Hier ist mein derzeitiger Versuch, eventuell weiß ja jemand eine Lösung:

    string matrixUID = "38";
    string referenceUID = "222";
    string buttonValue = "Montageleistung einfügen";
    string nameSpace = "COR_";
     
    try 
    StatusBar.WriteWarning("DEBUG - Rule: " + pVal.RuleInfo.RuleName + " was triggered."); 
     
    // Use reference item to set size and position of the add button
    Item referenceItem = Item.GetFromUID(pVal.Form, referenceUID);
     
    // Create button
    Button button = Button.CreateNew(nameSpace + "B1");
    button.Value = buttonValue;
    button.SetSizeAndPosition(referenceItem);
    button.Height = 22;
    button.Top = button.Top + 18;
    pVal.Form.AddItem(button);
    pVal.Form.Update();
     
    // Add click event to button
    SwissAddonFramework.UI.EventHandling.ItemEvents.ItemPressedEventHandler eventHandler = null;
    eventHandler = delegate (SwissAddonFramework.UI.EventHandling.ItemEvents.ItemPressed e)
    {
    try
    {
    // Get Matrix...
    Matrix matrix = Matrix.GetFromUID(pVal.Form, matrixUID);
    // Get current row count
    int rowCount = matrix.Rows.Count;
    int newRowIndex = rowCount + 1;
     
    SAPbobsCOM.Documents document = (SAPbobsCOM.Documents) SwissAddonFramework.
       B1Connector.GetB1Connector().
       Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oInvoices);
    document.SpecialLines.SetCurrentLine(0);
    MessageBox.Show(document.SpecialLines.LineNum.ToString(), "OK");
    document.SpecialLines.LineType = SAPbobsCOM.BoDocSpecialLineType.dslt_Text;
    document.SpecialLines.AfterLineNumber = 0;
    document.SpecialLines.LineText = "<b>Datum // Monteur & Monteur</b>";
    document.SpecialLines.Add();
    matrix.SetValue("1", rowCount, "03-001-000011");
    matrix.SetValue("1", rowCount + 1, "03-001-000012");
    matrix.SetValue("1", rowCount + 2, "03-001-000013");
    matrix.SetValue("1", rowCount + 3, "03-001-000008");
    matrix.SetValue("257", rowCount + 4, "S");
    }
    catch (Exception ex)
    {
    StatusBar.WriteError(ex.Message);
    }
    };
     
    button.AddHandler_ItemPressed(SwissAddonFramework.UI.Components.ModeComponent.FormModes.ALL, null, eventHandler);
    }
    catch (Exception ex)
    string errorMessage = string.Format("Error in {0} Rule '{1}': {2}", pVal.RuleInfo.RuleType, pVal.RuleInfo.RuleName, ex.Message);
    MessageBox.Show(errorMessage, "OK"); 
    StatusBar.WriteError(errorMessage); 
    Debug.WriteMessage(errorMessage, Debug.DebugLevel.Exception); 
    }
     
    return true;

    Gruß
    Manuel

    0

Please sign in to leave a comment.