一.、定期將AD資訊更新至系統表中
需要寫程式做一個ServerMethod,來實現排程。
註:請先檢查系統表的欄位長度是否夠長。
1. ServerMethod的範例如下:
public object ADTEST(object[] param)
       
{
           
//取得ADUsers、ADGroup
           
ADClass.ADPath = "LDAP://" + ServerConfig.DomainPath;
           
ADClass.ADUser = ServerConfig.DomainUser;
           
ADClass.ADPassword = ServerConfig.DomainPassword;
         
  List<ADUser> lstUser = new
List<ADUser>();
           
List<ADGroup> lstGroup = new List<ADGroup>();
           
try
           
{
                lstUser =
ADClass.GetADAllUser();
                lstGroup =
ADClass.GetADUserForGroup();
           
}
            catch
           
{
                return new object[] { 1,
"Please Setup \"EEPNetServer/Login Manger\" Frist" };
           
}
           
ArrayList Userlist = new ArrayList();
           
Userlist.AddRange(lstUser.ToArray());
           
ArrayList Grouplist = new ArrayList();
           
Grouplist.AddRange(lstGroup.ToArray());
           
//創建連接
           
IDbConnection connection =
(IDbConnection)AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString());
           
if (connection.State != ConnectionState.Open)
           
{
                connection.Open();
           
}
           
//開始transaction
           
IDbTransaction transaction = connection.BeginTransaction();
           
try
           
{
                //ADUser,新增前先刪除AD舊有資料
                string UserDeleteSql =
"delete from USERS where MSAD='Y'";
                this.ExecuteSql(UserDeleteSql,
connection, transaction);
                ADUser ADUse = new ADUser();
                for (int i = 0; i <
Userlist.Count; i++)
                {
                    ADUse =
(ADUser)Userlist[i];
                    string UserID =
ADUse.ID.ToString();
                    string USERNAME =
ADUse.Name.ToString();
                    string DESCRIPTION =
ADUse.Description.ToString();
                    string EMAIL =
ADUse.Email.ToString();
                    //將ADUsers資訊insert進Users表
                    string UserinsertSql =
"insert into USERS (USERID,USERNAME,DESCRIPTION,EMAIL,MSAD) " +
"values('" + UserID + "','" + USERNAME + "','" +
DESCRIPTION + "','" + EMAIL + "','Y')";
                   
this.ExecuteSql(UserinsertSql, connection, transaction);
                }
                //ADGroup,新增前先刪除AD舊有資料
                string GroupdeleteSql =
"delete from GROUPS where MSAD='Y'";
                this.ExecuteSql(GroupdeleteSql,
connection, transaction);
                string UserGroupdeleteSql =
"delete from USERGROUPS";
               
this.ExecuteSql(UserGroupdeleteSql, connection, transaction);
                ADGroup ADGrou = new ADGroup();
                for (int i = 0; i <
Grouplist.Count; i++)
                {
                    ADGrou =
(ADGroup)Grouplist[i];
                    string GROUPID =
ADGrou.ID.ToString();
                    string DESCRIPTION =
ADGrou.Description.ToString();
                    string USERID =
"";
                    //Group裡有User時才做新增動作
                    if (ADGrou.Users.Count !=
0)
                    {
                        //將ADGroups資訊insert進Groups表
                        string GroupinsertSql =
"insert into GROUPS (GroupID,DESCRIPTION,MSAD) values('" + GROUPID +
"','" + DESCRIPTION + "','Y')";
                       
this.ExecuteSql(GroupinsertSql, connection, transaction);
                        //將AD資訊insert進UserGroups表
          
             for (int j = 0; j
< ADGrou.Users.Count; j++)
                        {
                            USERID =
ADGrou.Users[j].ToString();
                            string
UserGroupinsertSql = "insert into USERGROUPS (USERID,GROUPID)
values('" + USERID + "','" + GROUPID + "')";
                           
this.ExecuteSql(UserGroupinsertSql, connection, transaction);
                        }
                    }
                }
                transaction.Commit();
                return new object[] { 0, true
};
           
}
           
catch
           
{
                transaction.Rollback();
                return new object[] { 1, "表中有資料重複或者發生錯誤!" };
           
}
           
finally
           
{
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(),
connection);
           
}            
       
} 
2. 請將此MethodName加入至ServiceManager元件中做設定,並建置專案。
3. 設定Scheduling:本例是以每個月5號早上八點執行,設定如下。

4. 設定好並保存後,把右下角功能列中的Scheduling按右鍵,選擇【Active】即完成

二.、自動起單
需要寫程式做一個ServerMethod,來實現排程。
1. ServerMethod的範例如下:
public object StartFlowStep(object[]
objPatam)
       
{
           
string TestID = "0000001"; 
           
string USERID = "003";//申請者的 ID
           
string USERNAME = "Rena";//申請者姓名
           
DbConnectionSet.DbConnection DC =
Srvtools.DbConnectionSet.GetDbConn(GetClientInfo(ClientInfoType.LoginDB).ToString());
           
string connstring = DC.ConnectionString;
           
SqlConnection sqlconn = new
System.Data.SqlClient.SqlConnection(connstring);
          
 //填入表單資料
           
SqlCommand sqlcmd = new SqlCommand(" Insert into TestMaster
(TestID,TestName,TestMark) values (@TestID,@TestName,@TestMark)",
sqlconn);
           
sqlcmd.Parameters.AddWithValue("@TestID", TestID);
           
sqlcmd.Parameters.AddWithValue("@TestName", USERNAME);
           
sqlcmd.Parameters.AddWithValue("@TestMark", USERID);
           
sqlconn.Open();
           
sqlcmd.ExecuteNonQuery();
           
sqlconn.Close();
           
EEPRemoteModule module = new EEPRemoteModule();
            object[] clientInfo = new object[] {
this.ClientInfo[0], -1, -1, string.Empty };
           
string UserId = ((object[])clientInfo[0])[1].ToString(); //先記錄原登入者
           
UserId = UserId.ToLower(); //系統用小寫比對
           
USERID = USERID.ToLower();
           
SrvGL.LogUser(USERID, USERNAME, "WFPlus", 1); //登錄
           
((object[])clientInfo[0])[1] = USERID; // 強制更改 ClientInfo 的 USERID 為申請者的 ID 
           
object[] ret = module.CallFLMethod(clientInfo, "Submit", new
object[]{null, new object[]{
                   
EEPRegistry.Server.ToString() + "\\Workflow\\FL\\Test.xoml",//流程文件名字,包含完整路徑。
                    "",//空白即可,系統使用
                    0,//是否為重要申請
                    0,//是否為緊急申請
                    "", //提交意見說明
                    "R01",//申請者的RoleID
                   
"sCustomers.Customers",//Server端的Dll名稱以及對應的InfoCommand的名字,比如S001.InfoCommand1
                    0, //系統使用
                    "0",//組織代號
                    "" //附件
                    },
                new object[]{
                    "TestID",//TAble的鍵值欄位,如果是多個欄位組合的話,可以以分號隔開,比如:"OrderID;CustomerID"
                    "TestID=''" +
TestID + "''"//key值組合,例如:"OrderID=10260;CustomerID=''A001''" (A001左右分別是兩個單引號)
                }
           
});
           
SrvGL.LogUser(USERID, USERNAME, "WFPlus", -1); //登出
           
if (ret[0].ToString() == "0")
           
{
                return new object[] { 0, true
};
           
}
           
else
           
{
                return new object[] { 1, false
};
           
}            
       
}
2. 請將此MethodName加入至ServiceManager元件中做設定,並建置專案。
3. 設定Scheduling:本例是以每天早上八點執行,設定如下

4. 設定好並保存後,把右下角功能列中的Scheduling按右鍵,選擇【Active】即完成
