SharePoint State Machine Workflow +ASP.NET ASPX Form step by step(3)-创建Instantiation Form...

     创建一个Instantiation表单,其实和创建一个Association表单是十分相识的,我也不像在这里把代码一一的贴出来,最后我会把所有的工程一次性的贴出来的.

     在前面创建Association Form的时候,为了简化过程,我没有讲如何将Association Data传到workflow中,并在Instantiation Form中使用.

     首先,为了简化,Association表单和Instantiation表单是一样的,两个表单都是一个PeoplePicker和一个TextBox,所以用于表示两个表单数据的类是相同的,只不过为了让代码看起来更清楚点,我定义了两个类,完全一样,只不过名字是不同的.

     

ContractedBlock.gif ExpandedBlockStart.gif Code
 1     [Serializable]
 2     public class AssociationData
 3     {
 4         private Contacts reviewers = default(Contacts);
 5         public Contacts Reviewers
 6         {
 7             get
 8             {
 9                 return this.reviewers;
10             }
11             set
12             {
13                 this.reviewers = value;
14             }
15         }
16 
17         private string description = default(string);
18         public string Description
19         {
20             get
21             {
22                 return this.description;
23             }
24             set
25             {
26                 this.description = value;
27             }
28         }
29 
30         public void AddContact(string contact)
31         {
32             if (this.reviewers == null)
33             {
34                 this.reviewers = new Contacts();
35             }
36             this.reviewers.AddContact(contact);
37         }
38         public string[] GetReviewers()
39         {
40             return this.reviewers.ContactList.ToArray();
41         }
42     }
43 
44     [Serializable()]
45     public class Contacts
46     {
47         private List<string> contacts;
48 
49         public List<string> ContactList
50         {
51             get { return contacts; }
52             set { contacts = value; }
53         }
54         public void AddContact(string contact)
55         {
56             if (this.contacts == null)
57             {
58                 this.contacts = new List<string>();
59             }
60             this.contacts.Add(contact);
61         }
62 
63     }

 

     因为PeoplePick是可以选择多个用户的,所以创建了一个Contact类,用来保存用户名.记得定义这些类需要加上[Serializable()],因为这些类会被序列化并传递给workflow实例.为此,我们也需要写两个辅助的函数,用于将我们输入的数据序列化成字符串,或是将序列化的数据反序列化成相应的对象.下面代码中的DeserializeAssoicationData函数,是将从Association表单中传递下来的序列化后的数据重新反序列化成相应的实例对象,而这些实例对象中的数据可以在Instantiation表单中被使用.serializeInstantiationFormDataToXML函数是将Instantiation表单中的数据序列化为XML字符串,传递给workflow实例,使得这些数据能够被后续的步骤中使用.

     

ContractedBlock.gif ExpandedBlockStart.gif Code
 public string serializeInstantiationFormDataToXML()
        {
            InstantiationData mydata 
= new InstantiationData();
            
string serializedDataToReturn;  

            
foreach (PickerEntity pe in Reviewers.ResolvedEntities)
            {
                mydata.AddContact(pe.Key);
            }

            mydata.Description 
= Description.Text;
.
            
using (MemoryStream stream = new MemoryStream())
            {
                XmlSerializer serializer 
= new XmlSerializer(typeof(InstantiationData));
                serializer.Serialize(stream, mydata);
                stream.Position 
= 0;
                
byte[] bytes = new byte[stream.Length];
                stream.Read(bytes, 
0, bytes.Length);

                serializedDataToReturn 
= Encoding.UTF8.GetString(bytes);   
            }

               
return serializedDataToReturn;
        }

 
private AssociationData DeserializeAssoicationData(string dataPassedIn)
        {
            XmlSerializer serializer 
= new XmlSerializer(typeof(AssociationData));
            XmlTextReader reader 
= new XmlTextReader(new System.IO.StringReader(dataPassedIn));

            AssociationData deserializedAssociationFormData 
= (AssociationData)serializer.Deserialize(reader);

            
return deserializedAssociationFormData;
        }

 

     至于Instantiation表单的ASPX页面,对于我来说,是很Assocaition页面是完全一样的,除了最开始的Inherit属性不同之外,其它的完全一样.而其相应的后台代码,和Association的后台代码是十分相似的,大家到时候看看代码就明白了.

转载于:https://www.cnblogs.com/jdxyw/archive/2008/12/19/1357979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值