2017-06-26 5 views
2

Erstens habe ich keine Ahnung, was ich tue. Ich habe zwei Skripts, die an einer Stelle einer Anwendung ausgeführt werden müssen. Für sich läuft es ganz gut, aber ich weiß nicht, wie man sie in dem einen Feld zusammenfügt.Noob: Kombination von zwei Skripten

# 1

if (sd.IsNew) 
    sd.Save(); //must save to get default GL Accounts, then they can be overwritten 

if (sd.LineItems.Count(s => s.val_Is_Non_Inventory && !s.IsMarkedToDelete && !s.IsDeleted) > 0) 

{ 
    SystemUser sysUser = new SystemUser(Framework.Controller.Credentials.UserName); 

    foreach (SalesLineItem sli in sd.LineItems.Where(s => s.val_Is_Non_Inventory && !s.IsMarkedToDelete && !s.IsDeleted)) 
     sli.val_Sales_Account = Genframe4.Utils.ConvertToString(sysUser["xGL_Sales_Acct"]); 
} 

return String.Empty; 

# 2

if (sd.val_Sales_Doc_Type == "INVOICE" && sd.val_Misc_Charge != (decimal) sd.Customer["xHandlingFeeAmount"]) 
     sd["xOverrideFee"] = true; 
    else 
     sd["xOverrideFee"] = false; 

    return ""; 
+0

Ist dies ein Open-Source- oder kommerzielles ERP-System, oder ist es ein internes Produkt, für das Sie scripten? – vbnet3d

+0

Welche Art von Fehlern werden erzeugt? Was läuft schief? – Sal

+0

Was meinst du mit * "addiere sie in einem Feld zusammen" *? Soll der zweite Teil der 'foreach' des ersten sein? Wie willst du sie kombinieren? –

Antwort

1

In Salespad, ein Skript ist wirklich nur ein C# Ereignis, das wie ein normales Ereignis sehr viel erhöht wird - mit dem Unterschied, dass der Benutzer den Code eingibt, anstatt dass er vorkompiliert wird.

Die Funktionssignatur für das Skript sieht wie folgt aus:

public string SalesDocumentPreSave(CancelEventArgs e, SalesPad.Bus.SalesDocument sd)See Documentation

Dies gibt die Möglichkeit, zu aktualisieren/manipulieren, um die SalesDocument als notwendig, bevor sie schließlich eine Nachricht zurück.

In diesem speziellen Fall, können Sie die Aussagen zusammen kombinieren können, sondern nur eine einzige return-Anweisung verwenden, wie unten dargestellt:

if (sd.IsNew) 
    sd.Save(); //must save to get default GL Accounts, then they can be overwritten 

if (sd.LineItems.Count(s => s.val_Is_Non_Inventory && !s.IsMarkedToDelete && !s.IsDeleted) > 0) 
{ 
    SystemUser sysUser = new SystemUser(Framework.Controller.Credentials.UserName); 

    foreach (SalesLineItem sli in sd.LineItems.Where(s => s.val_Is_Non_Inventory && !s.IsMarkedToDelete && !s.IsDeleted)) 
     sli.val_Sales_Account = Genframe4.Utils.ConvertToString(sysUser["xGL_Sales_Acct"]); 
} 

if (sd.val_Sales_Doc_Type == "INVOICE" && sd.val_Misc_Charge != (decimal) sd.Customer["xHandlingFeeAmount"]) 
    sd["xOverrideFee"] = true; 
else 
    sd["xOverrideFee"] = false; 

return String.Empty; 

die in der Dokumentation nach, sollte diese Arbeit. Beachten Sie jedoch, dass wir keinen Zugriff auf Ihre Umgebung oder andere Skripts haben, die dies beeinträchtigen könnten. Seien Sie sicher, gründlich zu prüfen.