# 计划服务插件 — C#（IScheduleService）

```csharp
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Log;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Orm.DataEntity;
using System;
using System.Collections.Generic;
using System.Linq;

namespace Kingdee.MyProject.Schedule
{
    public class MyScheduleService : IScheduleService
    {
        public void Run(Context ctx, Schedule schedule)
        {
            try
            {
                Logger.Info("-MySchedule", "批量任务开始。");

                // 获取用户
                string sql = "SELECT FUSERID FROM T_SEC_USER WHERE FNAME='demo'";
                var userId = DBUtils.ExecuteScalar(ctx, sql, 0);
                if (userId == 0)
                {
                    Logger.Error("-MySchedule", "用户不存在", null);
                    return;
                }
                ctx.UserId = userId;

                // 批量提交审核
                string formId = "PUR_PurchaseOrder";
                string idsSql = "SELECT FID FROM T_PUR_POORDER WHERE FDOCUMENTSTATUS = 'A'";
                var ids = DBUtils.ExecuteDynamicObject(ctx, idsSql);
                var pkIds = ids.Select(r => r["FID"]).ToList();

                if (pkIds.Count == 0)
                {
                    Logger.Info("-MySchedule", "无待审核单据");
                    return;
                }

                var submitResult = BusinessDataServiceHelper.Submit(ctx,
                    formId, pkIds.ToArray(), "Submit", null);
                if (submitResult.IsSuccess)
                {
                    BusinessDataServiceHelper.Audit(ctx, formId, pkIds.ToArray(), null);
                }

                Logger.Info("-MySchedule", "批量提交完成，共" + pkIds.Count + "条");
            }
            catch (Exception ex)
            {
                Logger.Error("-MySchedule", "异常：" + ex.Message, ex);
            }
        }
    }
}
```

**源码参考：** `移动工序汇报/` — BatchSubmitBillScheduleService.cs
