Textzeile / Text Editor in Belegformular ansprechen
Hallo zusammen,
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 Forum 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 mit der library, eventuell weiß ja jemand eine Lösung oder sieht wo ich einen Fehler mache:
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
Please sign in to leave a comment.
Comments
0 comments