2017-06-26 90 views
2

首先,我不知道我在做什么。我有两个脚本需要在我们使用的应用程序的一个位置运行。他们本身运行得非常好,但我不知道如何将它们一起添加到一个字段中。Noob:合并两个脚本

#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

这是一个开源或商业ERP,还是某种你正在编写的内部产品? – vbnet3d

+0

正在产生什么样的错误?出了什么问题? – Sal

+0

你是什么意思*“将它们添加到一个字段中”*?第二个应该是第一个“foreach”的一部分吗?你想如何结合他们? –

回答

1

在Salespad,脚本其实只是一个被提升非常像一个正常的事件C#事件 - 区别在于用户输入代码而不是预编译。

为脚本函数签名看起来是这样的:

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

这给了机会更新/操纵最后返回一个消息之前在必要时SalesDocument。

在这种特殊情况下,可以将语句组合在一起,但只能使用一个return语句,如下图所示:

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; 

根据文档,这应该工作。但请记住,我们无法访问您的环境或其他可能影响此操作的脚本。一定要彻底测试。