Noob:结合两个脚本

时间:2017-06-26 18:46:58

标签: c#

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

#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 "";

1 个答案:

答案 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;

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