ĐÀO TẠO DOANH NGHIỆP : SỞ KHOA HỌC CÔNG NGHỆ TỈNH ĐỒNG NAI

ENTERPRISE TRAINING: DONG NAI DEPARTMENT OF SCIENCE AND TECHNOLOGY.

HÌNH ẢNH TẬP HUẤN LỚP SHAREPOINT WORKFLOW VÀ KIẾN TRÚC SHAREPOINT

PHOTOS OF SHAREPOINT WORKFLOW AND ARCHITECTURE CLASS.

HÌNH ẢNH TẬP HUẤN LỚP SHAREPOINT WORKFLOW VÀ KIẾN TRÚC SHAREPOINT

PHOTOS OF SHAREPOINT WORKFLOW AND ARCHITECTURE CLASS.

Showing posts with label Workflow InfoPath Form. Show all posts
Showing posts with label Workflow InfoPath Form. Show all posts

Thursday, November 7, 2013

Deploy infopath form as content type when new form item

Download Infopath Form and Project at HERE

Open Infopath 2010 designer >> New >> Blank Form >> Design Form
Design form like this
File >> Form Options
At Security and Trust “left panel” do like this
File >> Publish >> Network Location
Save infopath file to folder microsofttechnology.net
Continue publish your infopath form to your folder
Save it in same folder microsofttechnology.net
Here is path of infopath file is published >> Next
Delete all text at textbox >> Next
Click OK
Click Publish
Click Close
Publish infopath form to Central admin: Go to your central admin >> General Application Settings >> at InfoPath Form Services category click to “”Manage form templates
Click to Upload form template link
Browse to your infopath publish file
Upload successful
Activate your infopath form

Open your visual studio >> Add new project >> Empty Sharepoint Project >> Named is microsofttechnology
Right click to project >> add new item >> content type >> Named is microsofttechnologyCT
Choose inherit from Form content type
Here is default content
Replace code in file by
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <!-- Parent ContentType: Form (0x010101) -->
  <ContentType ID="0x01010100b3c8d04f923b4193b1b58f387884038a"
               Name="microsofttechnologyCT"
               Group="microsofttechnology"
               Inherits="TRUE"
               RequireClientRenderingOnNew="FALSE"
               Version="0">
    <FieldRefs>
    </FieldRefs>
    <DocumentTemplate TargetName="/FormServerTemplates/microsofttechnologyPublish.xsn" />
  </ContentType>
</Elements>
Right click to project >> add new item >> Module >> Named is microsofttechnologyModule
Right click to project >> add new item >> Module >> Named is microsofttechnologyModule

Delete the Sample.txt

Right click to microsofttechnologyModule >> Add new existing item
Browse to your infopath publish form
Clear the path properties of infopath form
Result like this
Add URL and Type into Elements.xml of module like this
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="microsofttechnologyModule" Url="FormServerTemplates">
  <File Path="microsofttechnologyPublish.xsn" Url="microsofttechnologyPublish.xsn" Type="GhostableInLibrary"/>
</Module>
</Elements>
Explain for URL=”FormServerTemplates”: we publish form into FormServerTemplates form library
Rename Feature1 to microsofttechnologyFeature (option)
Add event receiver for feature
Default content like this
Add references to Microsoft.Office.InfoPath.Server.Dll (path: C>:\Program Files\Microsoft Office Servers\14.0\Bin)
Using namespace:
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;

using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Security;
using Microsoft.Office.InfoPath.Server.Administration;

using Microsoft.SharePoint.Workflow;
Add code like this
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;

using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Security;
using Microsoft.Office.InfoPath.Server.Administration;

using Microsoft.SharePoint.Workflow;

namespace microsofttechnology.Features.microsofttechnologyFeature
{
    /// <summary>
    /// This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade.
    /// </summary>
    /// <remarks>
    /// The GUID attached to this class may be used during packaging and should not be modified.
    /// </remarks>

    [Guid("503fca19-7ed2-40c4-b0a8-dd2883af7e9c")]
    public class microsofttechnologyFeatureEventReceiver : SPFeatureReceiver
    {
        private const string MINIMALACTIVEXTOOPEN = "SharePoint.OpenXmlDocuments.2";
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            SPSite site = properties.Feature.Parent as SPSite;
            SPWeb web = site.RootWeb;
            // Update the custom content type to allow rendering in web browser.
            SPContentType ct = web.ContentTypes[new SPContentTypeId("0x01010100b3c8d04f923b4193b1b58f387884038a")];
            if (ct.NewDocumentControl != MINIMALACTIVEXTOOPEN || ct.RequireClientRenderingOnNew)
            {
                ct.NewDocumentControl = MINIMALACTIVEXTOOPEN;
                // Ensure the RequireClientRenderingOnNew property is correctly set for web browsing.
                ct.RequireClientRenderingOnNew = false;
                // Don't forget to update the content type with the changes.
                ct.Update(true, false);
            }
            web.AllowUnsafeUpdates = true;
            web.Lists.Add("MicrosoftTechnologyForm", "This is Form library for MicrosoftTechnology", SPListTemplateType.XMLForm);
            web.Update();
            SPList myFormLibrary = web.Lists["MicrosoftTechnologyForm"];
            myFormLibrary.OnQuickLaunch = true;
            myFormLibrary.ContentTypesEnabled = true;
            SPContentType spContentType = web.AvailableContentTypes["microsofttechnologyCT"];
            myFormLibrary.ContentTypes.Add(spContentType);
            myFormLibrary.Update();
            SetDefaultContentTypeOnSite(web, myFormLibrary);           

        }
        public void SetDefaultContentTypeOnSite(SPWeb web, SPList splist)
        {
            if (splist.ContentTypesEnabled)
            {
                SPFolder rootFolder = splist.RootFolder;
                IList<SPContentType> ctList = rootFolder.ContentTypeOrder;
                if (ctList.Count > 1)
                {
                    foreach (SPContentType ct in ctList)
                    {
                        if (ct.Name.Equals("Form"))
                        {
                            splist.ContentTypes["Form"].Delete();
                            splist.Update();
                            continue;
                        }
                    }
                    rootFolder.Update();
                }
            }
        }
        public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        {
            base.FeatureInstalled(properties);

            FormsService formsService = GetFormsService();
            if (formsService == null)
            {
                //throw new ArgumentNullException("formsService",
                //                string.Format("Unable to retrieve FormsService during installation of \"{0}\". Argument formsService was null."),
                //                                properties.Feature.Definition.Name);
            }

            // Get list of form templates that are being deployed as part of this feature.
            List<String> formTemplates = GetInfoPathFormTemplates(properties.Definition.Properties, properties.Definition.RootDirectory);
            foreach (string formTemplate in formTemplates)
            {
                if (formsService.FormTemplates.ItemFromFile(formTemplate) == null)
                {
                    FormTemplateCollection.RegisterFormTemplate(formTemplate, properties.Definition, false);
                }
            }
        }
        public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        {
            base.FeatureUninstalling(properties);

            FormsService formsService = GetFormsService();
            if (formsService == null)
            {
                //throw new ArgumentNullException("formsService",
                //                    string.Format("Unable to retrieve FormsService during uninstallation of \"{0}\". Argument formsService was null."),
                //                    properties.Feature.Definition.Name);
            }

            // Get list of form templates that were deployed as part of this feature.
            List<String> formTemplates = GetInfoPathFormTemplates(properties.Definition.Properties, properties.Definition.RootDirectory);
            foreach (string formTemplate in formTemplates)
            {
                if (formsService.FormTemplates.ItemFromFile(formTemplate) != null)
                {
                    formsService.FormTemplates.UnregisterFormTemplate(formTemplate, properties.Definition);
                }
            }
        }
        private List<String> GetInfoPathFormTemplates(SPFeaturePropertyCollection properties, string featureRootPath)
        {
            FileInfo[] filesInfo = new DirectoryInfo(featureRootPath).GetFiles("*.xsn");
            List<String> infoPathFormFileSpecs = new List<String>();
            foreach (FileInfo fileInfo in filesInfo)
            {
                infoPathFormFileSpecs.Add(Path.Combine(fileInfo.DirectoryName, fileInfo.Name));
            }

            return infoPathFormFileSpecs;
        }
        private FormsService GetFormsService()
        {
            FormsService formsService = null;
            if (SPFarm.Local != null)
            {
                formsService = SPFarm.Local.Services.GetValue<FormsService>(string.Empty);
            }
            else
            {
                formsService = SPContext.Current.Site.WebApplication.Farm.Services.GetValue<FormsService>(string.Empty);
            }
            return formsService;
        }
        // Uncomment the method below to handle the event raised after a feature has been activated.

        //public override void FeatureActivated(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised before a feature is deactivated.

        //public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised after a feature has been installed.

        //public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised before a feature is uninstalled.

        //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        //{
        //}

        // Uncomment the method below to handle the event raised when a feature is upgrading.

        //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        //{
        //}
    }
}
Build project
Double click to the feature and set scope is Site >> Deploy project
The result as:
Form library is created
Infopath form is uploaded
Content type is created
Demo: clickto MicrosoftTechnologyForm >> Add document
Appear infopath form >> input information then save it
The result as


Thanks.

Sunday, March 25, 2012

SharePoint 2010 State Machine Workflows with Custom Task Forms (InfoPath) using Visual Studio 2010 (Part 1)

How to create Infopath Form for Direct Manager Approve
Open Infopath Form Designer
 File | New | Blank Form | Design Form

Design UI as follows:

Right click field1 | Text Box Properties…| change Field name is Status

Right click field2 | Text Box Properties…

Change Field name is Comment

Right click to button | Button Properties…

Change label: Submit

UI after is changed as follows

Click to button Submit | On ribbon choose Add Rule | When this button is clicked | Submit data

At rule Details Box | Add

At Data Connection Wizard Choose | Create a new connection to: | Submit data then click Next

Choose radio “To the hosting environment , …” then click Next

Click Finish

Click OK

Rename for this rule is Submit Rule

Continue, click to button Submit | On ribbon | Add Rule | When this button  is clicked | Close Form (Image 10)

Click OK

Rename for this rule is Close Rule

File | click to Form Options

At Category | Security and Trust | uncheck Automatically determine … | choose Domain (…)
Remember check to “Sign this form template” and click Create Certificate …  if have not any certificate
          
File | Publish | Network Location

Save this template

Continue , click Browse… to publish this template

Save this publish template

Click Next 

Clear all text in textbox then click next (Image 20)

Click OK when Warning

Click Publish

Click Close

File | Form Template Properties

Copy ID of Form as follows:

Save this ID to notePad
urn:schemas-microsoft-com:office:infopath:GeneralDirectorAppove:-myXSD-2012-03-23T08-37-10