首先,我不知道自己在做什么。我有两个脚本需要在我们使用的应用程序的一个位置运行。它们本身运行得非常好,但我不知道如何将它们一起添加到一个字段中。
#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 :(得分: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;
根据文档,这应该有效。但请记住,我们无法访问您的环境或可能影响此环境的其他脚本。一定要彻底测试。