系统表单客开打印&输出


类全局变量

ShipBListUIFormWebPart MyPart;
IExportSettings settings;
// 模板ID
string TempID;

注册按钮

public override void AfterInit(IPart Part, EventArgs args)
{
    MyPart = (ShipBListUIFormWebPart)Part;
    base.AfterInit(Part, args);

    // 获取工具栏控件
    var _Toolbar = MyPart.GetUFControlByName(MyPart.TopLevelContainer, "Toolbar1") as IUFToolbar;

    // 设置客开输出按钮
    var BtnCustOutPut = UIControlBuilder.BuilderToolbarButton(_Toolbar, "True", "BtnCustOutPut", "True", "True", 60, 28, "29", "", true, false, "f77e3585-971f-4a21-b573-e1c681d78519", "f77e3585-971f-4a21-b573-e1c681d78519", "f77e3585-971f-4a21-b573-e1c681d78519");
    UIControlBuilder.SetButtonAccessKey(BtnCustOutPut);
    BtnCustOutPut.Text = "客开输出";
    BtnCustOutPut.ID = "BtnCustOutPut";
    BtnCustOutPut.AutoPostBack = true;
    BtnCustOutPut.Action = "";
    BtnCustOutPut.UFTabIndex = 10;
    BtnCustOutPut.UIModel = MyPart.Model.ElementID;
    BtnCustOutPut.Click += new EventHandler(BtnCustOutPut_Click);
    ((UFWebToolbarAdapter)_Toolbar).Items.Add(BtnCustOutPut as Control);

    // 设置客开打印按钮
    var BtnCustPrint = UIControlBuilder.BuilderToolbarButton(_Toolbar, "True", "BtnCustPrint", "True", "True", 60, 28, "30", "", true, false, "f77e3585-971f-4a21-b573-e1c681d78519", "f77e3585-971f-4a21-b573-e1c681d78519", "f77e3585-971f-4a21-b573-e1c681d78519");
    UIControlBuilder.SetButtonAccessKey(BtnCustPrint);
    BtnCustPrint.Text = "客开打印";
    BtnCustPrint.ID = "BtnCustPrint";
    BtnCustPrint.AutoPostBack = true;
    BtnCustPrint.Action = "";
    BtnCustPrint.UFTabIndex = 10;
    BtnCustPrint.UIModel = MyPart.Model.ElementID;
    BtnCustPrint.Click += new EventHandler(BtnCustPrint_Click);
    ((UFWebToolbarAdapter)_Toolbar).Items.Add(BtnCustPrint as Control);
}

打印

/// <summary>
/// 客开打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void BtnCustPrint_Click(object sender, EventArgs e)
{
    try
    {
        MyPart.Model.ClearErrorMessage();

        MyPart.DataCollect();

        settings = ExportServiceFactory.GetInstance().CreateExportSettingsObject();
        settings.PrintTemplateCatalogType = "Cust.Print";
        settings.UserDataCallBack = new(GetData);
        var ev = new UIActionEventArgs() { Tag = settings };
        CommandFactory.DoCommand("OnPrint", MyPart.Action, sender, ev);
    }
    catch (Exception ex)
    {
        MyPart.Model.ErrorMessage.Message = ex.Message;
    }
}

输出

/// <summary>
/// 客开输出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void BtnCustOutPut_Click(object sender, EventArgs e)
{
    try
    {
        MyPart.Model.ClearErrorMessage();

        MyPart.DataCollect();

        settings = ExportServiceFactory.GetInstance().CreateExportSettingsObject();
        settings.PrintTemplateCatalogType = "Cust.Print";
        settings.UserDataCallBack = new(GetData);

        // 由于输出的多模板选择无法直接获取到模板ID,通过系统自己写入的缓存来获取,必须在数据收集前,否则系统会清空该缓存
        var PrintSet = (UFPrintEnvSettings)MyPart.CurrentState[$"UFExportSettings_{MyPart.CurrentState[$"ExportStatus_{MyPart.TaskId}"]}"];
        TempID = PrintSet is null ? "" : PrintSet.PrintTemplateID;

        var ev = new UIActionEventArgs() { Tag = settings };
        CommandFactory.DoCommand("OnOutPut", MyPart.Action, sender, ev);
    }
    catch (Exception ex)
    {
        MyPart.Model.ErrorMessage.Message = ex.Message;
    }
}

获取数据

/// <summary>
    /// 获取数据
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    /// <exception cref="Exception"></exception>
    public void GetData(object sender, DataCallBackEventArgs args)
    {

        if (MyPart.Model.Ship.SelectRecords.Count() <= 0)
            return;

        var Key = DateTime.Now.Ticks;

        // 获取选中行的所有出货行的ID
        var SQL = string.Empty;
        var ShipLineIDs = new List<long>();
        foreach (var item in (MyPart.Model?.Ship.SelectRecords).Cast<ShipRecord>())
        {
            SQL += $"INSERT INTO Cust_ShipPrint SELECT {Key},{item.GetValue("ShipLines_ID")};";
            ShipLineIDs.Add(Convert.ToInt64(item.GetValue("ShipLines_ID")));
        }

        if (SQL is null or "") throw new Exception("数据收集失败!");
        DataAccessor.RunSQL(DataAccessor.GetConn(), SQL, null);

        // 如果是打印就从args实体中取
        TempID = string.IsNullOrEmpty(TempID) ? args.CurrentPrintTemplateID : TempID;

        if (TempID is null or "") throw new Exception("请选择一个模板!");

        // 设置下载的PDF文件名
        settings.FileName = TempID switch
        {
            "fd884389-2c8d-4be1-a5c1-3d67235147ea" => "出货单列表常用对账单",
            _ => string.Empty,
        };

        var DPL = new DataParamList
        {
            DataParamFactory.CreateInput("TabID", Key, DbType.Int64),
            DataParamFactory.CreateInput("TemplateID", args.CurrentPrintTemplateID, DbType.String)
        };
        DataAccessor.RunSP("Pro_Cust_GetShipPrint", DPL, out DataSet DS);

        if (DS is null || DS.Tables?.Count <= 0 || DS.Tables[0].Rows?.Count <= 0)
            throw new Exception("没找到符合条件的打印数据!");

        args.ReturnData = DS;

    }

}