SlideShare uma empresa Scribd logo
1 de 108
SlideShare.comSeptember 2009Tutorial – Coding a SharePoint Happy Birthday Workflow with Visual Studio 2008Using an InfoPath Form for Input and Word Document as OutputGeorge Catrombon Contents TOC  
1-3
    SUMMARY PAGEREF _Toc241566766  3DESCRIPTION OF THE WORKFLOW PAGEREF _Toc241566768  3SUMMARY SNAPSHOTS OF OUR WORKFLOW PAGEREF _Toc241566769  4OVERVIEW OF THIS TUTORIAL PAGEREF _Toc241566770  12STEPS INVOLVED IN THE PROCESS PAGEREF _Toc241566771  12SOFTWARE REQUIRED TO DUPLICATE THIS PROJECT PAGEREF _Toc241566774  13STEP 1 – CREATE A NEW LIBRARY IN SHAREPOINT PAGEREF _Toc241566775  13STEP 2 – CREATE A TEMPLATE FOR THE BIRTHDAY CARD PAGEREF _Toc241566776  17STEP 3 – CREATE THE WORD DOCUMENT FOR THE BIRTHDAY CARD FROM WITHIN THE LIBRARY PAGEREF _Toc241566779  20STEP 4 – CREATE OUR INFOPATH 2007 FORM TO ACCEPT INPUT FROM THE USERS. PAGEREF _Toc241566787  35STEP 5 – CODE OUR WORKFLOW IN VISUAL STUDIO PAGEREF _Toc241566794  70STEP 6 – CONFIGURE WORKFLOW.XML AND FEATURE.XML IN VISUAL STUDIO PAGEREF _Toc241566798  92CONCLUSION PAGEREF _Toc241566799  95 SUMMARY This tutorial will demonstrate how to create a SharePoint sequential workflow that will reveal many useful techniques that can be applied in the field.  The purpose of this workflow is to send a Birthday Card (as a Word document) via Email to a SharePoint user with some of the text of the Birthday Card filled out dynamically in C# code during the workflow.  The dynamically populated fields will get their input from an InfoPath form presented to the person who is assigned the task of signing the card.  This is similar to what might happen in an office today when your supervisor wants a person in his/her group to send a birthday card to a particular birthday boy or girl.  In our situation, the supervisor creates the card from a SharePoint library as a Word document (as a content type) which has a workflow attached to it.  The difference here is that the process is under the management of the workflow which we will code in Visual Studio 2008. Note: This is a long tutorial with a vast number of steps required to complete it. The reader should be alert to how complex the process is to create a very simple sequential workflow that does some fancy work behind the scenes using InfoPath forms.  DESCRIPTION OF THE WORKFLOW Let’s take a moment to better describe what we want.  A birthday card will be created as a content type for a SharePoint library that we will create.  We will call the library Happy Birthday Card Library.  A birthday card will be a Word document, with a picture of a birthday cake, and several pre-defined fields as Word properties which are linked to column types in the library.  Some of these fields will be filled out by the initiator of the birthday card (the supervisor most likely) which will include the name of the recipient (E.g. “Jane Smith”), an opening greeting (E.g. “Best wishes on your Birthday!”), the email address of the recipient, and the login name of the person assigned the task of signing the card (E.g. JohnDoe@yourdomain.com).  There will then be two additional fields which need to be populated by the signer of the card.  These two fields are filled out by using an InfoPath form.  These fields are from (E.g. “John”) and the message the signer would like to include (E.g. “Hope you like the cake!”). When the signer completes the workflow task, the workflow will finish populating the Word document Birthday Card with the two fields obtained from the InfoPath form, and then email the updated Birthday Card to the recipient as an email attachment.  The workflow will then mark the task as completed. The other thing we will do is disable the submit button on the InfoPath form when the workflow task is completed.  If we did not do this, then the user could re-submit the form again and again from the Tasks page.  There will have to be a feedback mechanism for the InfoPath form to make it aware that the task was completed.  We disable the submit button in this example. SUMMARY SNAPSHOTS OF OUR WORKFLOW For reference, the snapshots below summarize the procedure of sending the birthday card. ,[object Object],Figure 1 ,[object Object],Figure 2 – Creator fills out 4 fields in the Word properties boxes Note that Mary Smith was assigned the task of signing the card (E.g. Assigned To Login Name = MY_NETBIOS_NAMEarysmith in the property field Figure 2) ,[object Object],Figure 3 - Exit Word ,[object Object],Figure 4  Workflow is stated automatically on save. ( Figure 5) Figure 5 – Our workflow has started. We now sign in as Mary Smith, signer of the card.  The task is present on her task list. (Figure 6) Figure 6 – We are now signed in as Mary Smith Mary clicks “Please sign this birthday card” and gets the InfoPath form which she fills out 2 fields. (Figure 7) Figure 7 – Mary fills out the form. Mary clicks the submit button and the task completes.  (Figure 8) Figure 8 – Task completed! Recipient of the card gets an email with the filled out Birthday Card. (figure 9 & 10) Figure 9 Figure 10  Word document is fully populated by our Workflow. (Figure 11) Figure 11 – Card filled out by the Workflow! ,[object Object],Figure 12 – Submit button is disabled via feedback from the Workflow on subsequent tries So, that’s the flow.  It’s very simple from the user’s perspective.  However, to get all this working requires a considerable amount of knowledge and work.  Let’s get started. OVERVIEW OF THIS TUTORIAL This tutorial has a huge number steps that need to be performed to set up this workflow. There is very little C# code in the Workflow, and most of the work is done outside of the workflow programming in preparation.  Also, this tutorial is quite long since there are so many pieces that need to be discussed to get all of this to work together.   Also, there are some issues that would need to be addressed in a production environment. One of them is that we only have one Word document Birthday Card in our SharePoint library.  Our C# code references this Word document by its filename and is hard coded.  We would need to enhance the C# code to allow any filename to be used for a Birthday Card. One way to do this is to include another property on the Birthday Card Word document named Filename which the initiator of the card would fill out.   Another issue is that our InfoPath form takes over the page where a user would normally change the % complete and status of the Workflow.  That is why we update the completed status in the Workflow rather than let the user do it manually.  Students of SharePoint Minds are encouraged to modify this Workflow to address those issues.  In any event, this tutorial has a wealth of good information regarding SharePoint workflows that would be helpful.    STEPS INVOLVED IN THE PROCESS To create this work flow, we have to perform the following steps: ,[object Object]
Create a template for the Birthday Card in the library by defining new columns.
Create the Word document Birthday Card.
 Add the Birthday Card as a content type to the library.
Create our InfoPath 2007 task form to accept user input for the From and Message fields.
Configure the InfoPath form to receive feedback from the workflow by specifying a secondary data source.
Configure the InfoPath form to be presented in a web page with Full Trust security and temporary certificate.
Code the Workflow using Visual Studio 2008 in C#.
Configure the Workflow in Visual Studio to include the InfoPath form as part of the deployment.
Configure the Workflow.xml file so that our InfoPath form is presented to the user in a web page.
Configure feature.xml so that our InfoPath form is deployed as a feature.NOTE: It should be noted that this author created this library under the Team Site tab of his main portal SharePoint site.  This means that the columns that we create (E.g. To, From, Greeting, Assigned to Login Name, Email Address, Completed, and Message) in our Happy Birthday Library are not global site columns, but local to the Team Site.  SOFTWARE REQUIRED TO DUPLICATE THIS PROJECT The software requirements for this project are significant.  The software that you will need is as per the following list: ,[object Object]
Microsoft Windows Server 2003 installed on the Virtual Machine (E.g. the VM)
Ability of the virtual machine to connect to the internet using the Microsoft Loopback adapter (see the document on this topic by this author on the SharePointMinds.com site).
Microsoft SharePoint 2007
Microsoft SQL Server 2005 (required by SharePoint)
Microsoft Visual Studio 2008
Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions, Version 1.2
InfoPath Forms 2007
Visual Studio Tools for Applications 2007
 Microsoft Word 2007STEP 1 – CREATE A NEW LIBRARY IN SHAREPOINT On your SharePoint site (in this case, the authors Team Site), click Site Actions > Create as shown in Figure 13.  Figure 13 On the resulting page, click Document Library as shown in Figure 14. Figure 14 Fill out the form for the new library and Click Create.  Refer to Figure 15. Figure 15 This will result in a new library as shown in Figure 16. Figure 16 This completes the creation of our library. STEP 2 – CREATE A TEMPLATE FOR THE BIRTHDAY CARD In this step, we are going to create several new columns.  These columns will be available in the Happy Birthday Card Word document that we create and will become Word document objects.  SharePoint will take care of the linking for us. We will be able to access the contents of the Word objects in the C# code behind.  That means that we can read the fields, but it also means that we can write to the fields in the C# code behind in the Workflow.  Therefore, the Word document serves as an input form where we can enter values in the fields.  It is intended that only 4 of the fields are filled out when the administrator creates a new Birthday Card (E.g. To, Greeting, Assigned To Login Name, Email Address).  The remaining fields will be filled out in C# code using data from the InfoPath form.  In the Happy Birthday Card Library, click Settings > Document Library Settings as shown in Figure 17. Figure 17 Now we want to create some new columns for our Birthday Card.  We are going to have to repeat the process for each of our columns.  Column names in red are required fields to be filled out by the creator of the card.  Our columns are: To Greeting From Message Email Address Assigned To Login Name Completed The first four columns will be filled out by the person who starts the Birthday Card process from the library.  That is, when he/she creates new instance of the Birthday Card by clicking the New > Happy Birthday Card menu selection in the library.  To: will be the name of the person who will receive the Birthday Card. Example: To: Jane Smith   Initial Greeting: The second line will be the initial greeting which is the basic text of the card to be displayed.  Example:  Happy Birthday Jane! Email Address: The email address of the recipient of the card. Assigned To Login Name: The ID of the person assigned the task of signing the card and providing a message.  Example: yourdomainohnsmith The remaining columns will be filled out dynamically by the workflow that we will code.  The content of the remaining columns will be obtained from information that is submitted when the signer completes their workflow task by filling out an InfoPath 2007 form during the workflow process.   So now let’s add come columns. We will only show the process for the first column.  The rest of the columns will follow the same procedure. Click Create Column as shown in Figure 18.  Figure 18 The resulting page is shown in Figure 19.  Fill out the form as shown in Figure 19.   NOTE: All the fields will be single line of text for all our columns. Also, four of the fields will be required fields, so check the radio button to make it a required field. Recall that we denoted the required columns in red above. Figure 19 Repeat this process for our remaining columns.  The final result showing all columns created should appear as shown in Figure 20 (except for title which was there already). Figure 20 – Our 7 columns added STEP 3 – CREATE THE WORD DOCUMENT FOR THE BIRTHDAY CARD FROM WITHIN THE LIBRARY Return to the Birthday Card Library in SharePoint.  From the New > New Document menu selection, create a new Word document (which will be aware of our columns template that we just created).  Refer to Figure 21. Figure 21 An instance of a blank Word document will appear and will show our columns template as shown in Figure 22.  Figure 22 – Note the text boxes, 4 with red asterisks denoting required fields Next, convert the Word document as shown in Figure 23 and Figure 24.   NOTE: You must convert the document or you will not be able to create the objects that are linked to the 7 site columns that we created. From the main menu, click Convert. A dialog will appear as in Figure 24.  Click OK.  Figure 23 Figure 24 Now we must save the document to a directory on disk.  Do not save the document in the SharePoint library which is the default.  Save it to a directory of your choice on disk. To save the document, this author navigated to his My Documents directory as shown in Figure 25.  Figure 25 Next, we added a Happy Birthday text at the top and added a picture as shown in Figure 26. Once you have done this, save the document (again). Figure 26 – We added a picture and Happy Birthday as text Now we need to add some Word Objects to our document in the body just below the picture of the cake. We will perform the following procedure for all of our columns in turn.   Place the cursor in Word where you would like to create the To object (just below the cake for this one). Then, Click the Insert tab, then Quick Parts > Document Property.  Refer to Figure 27.  Figure 27 – An object corresponding to the menu item To will be placed at the cursor. On the resulting dropdown, scroll down to the To listing and click it.  This will cause the To object to be inserted at the cursor in the Word document as shown in figure 28. Figure 28 – Our To object was inserted at the cursor in Word NOTE: These objects in Word will be available in our C# code behind in the workflow. We can either read from them, or write to them in code. Perform these steps again in turn, for our remaining objects. When finished, the Word document should appear as in Figure 29. Figure 29 – 4 of 7 of our template columns are now objects in the body of the Word document.  We never show the other 3 properties on the card. Our Word document is now finished. Click save (remember not to save in the SharePoint library, save it to the same directory you have been using), and then exit Word by clicking Exit Word as shown in Figure 30. Figure 30 – Exit Word Figure 31 – Saving the completed document We now need to add our Happy Birthday Word document to our library.  To do that, navigate to our Happy Birthday Library, and click Actions > Open in Windows Explorer as shown in Figure 32.  Figure 32 When explorer opens, click on the Forms icon, and then you should see the various forms as shown in Figure 33.  We need to copy and paste our Happy_Birthday_Card.docx file to this directory.  To do that, navigate to the location where you saved the Word document, copy it, and navigate back to this directory and paste it.  The result should be as shown in Figure 34.  Figure 33 – We need to add our Word document here Figure 34 – Are new Word document pasted into the directory Next, click on Settings > Document Library Settings as shown in Figure 35.  Figure 35 We now need to add the content type for our Happy Birthday Card Word document to the library. As shown in Figure 36, click on Add from existing content types. Note: if your page does not show the Content Types section, refer to Appendix A to get it to display.  Figure 36 Now, using Figure 37, find the content type Birthday Card in the left hand list box, and add it to the right hand list box.  Figure 37 Note: The content type of Birthday Card should appear in the left hand list box because we placed our Word document in the Forms directory of the library. Your name may differ depending on what you saved the Happy Birthday Card Word document filename to. We should now see a new content type in our library as shown in Figure 38. Figure 38 NOTE: this author recommends that you change the order of the content types shown in Figure 38. Place the Birthday Card content type first, and move Document below it. You can reverse the order by clicking the link just below the red circle in Figure 38 (its cut off in the figure) called Change new button order and default content type. Next, we need to specify the template to use for the Birthday Card content type.  As shown in Figure 39, click on Advanced Settings.  Figure 39 On the resulting page, add the URL of our Happy_Birthday_Card.docx file as shown in Figure 40. Remember we just pasted the document in the forms directory. Click OK.  Figure 40 Now, let’s check if our blank Birthday Card loads. As shown in Figure 41, click on New > Birthday Card Figure 41 Our Birthday Card Word document should open up as shown in Figure 42.  If it does, all is well and we can move on to the next step.  Close the Word document without saving it.  Figure 42 This completes step 3. QUESTION: Should our Happy Birthday Card been installed as part of the deployment process where a deployment package would be executed on each server in the farm? ANSWER: Not necessarily.  Remember that content types are stored in the content data base.  It will therefore be available to all servers in the farm.  So, installing it as we did here only need be done once.   STEP 4 – CREATE OUR INFOPATH 2007 FORM TO ACCEPT INPUT FROM THE USERS. The purpose of this InfoPath form is to collect the name and birthday greeting from the person assigned the task of signing the card in the workflow.  Also, we want it to be presented in a web page rather than in the InfoPath client (which is the default).  We will have to specifically configure the InfoPath form to open in a web browser. We also will provide some validation.  If either of the 2 fields are blank, we need to prevent the user from submitting the form.  Also, we will need to provide the means to disable the Submit button if the workflow has been completed.   4.1 Open the InfoPath application and create a new blank form project We now need to open the InfoPath application and create a new blank template as shown in Figure 43.  Figure 43 4.2 – Add a basic layout to the form On the resulting screen under Design Tasks, click on Layout as shown in Figure44.  Figure 44 Select the Table with Title layout.  You should then see a new layout as shown in Figure 45. Figure 45 Change the title to Enter Birthday Card Message as shown in Figure 46. Figure 46 This author changed the color scheme by clicking the navigation items as shown in Figure 47. Figure 47 4.3 – Add 3 rows and split them into 2 columns Next, we add 2 rows beneath the title, and then we split those rows into 2 columns as shown in Figure 31. This is done by right clicking on the table, and selecting the appropriate menu items to add rows and split into 2 columns. Refer to Figures 48 & 49. Figure 48 Figure 49 4.4 Add a text box control to each row From the right hand Task Pane as shown in Figure 50, click the drop down arrow and select Controls from the menu.  We are now going to add a text box on each of our three rows in the table.  Figure 50 Drag a text box onto each row of our table as shown in Figure 51, and add the text in the left hand columns as shown.  Figure 51 4.5 – Modify the names of the default DataSource fields assigned to our text boxes NOTE:  When you create a form template, Microsoft Office InfoPath automatically creates a default data source for you. All InfoPath form templates contain a single, default data source.  You add fields and groups to the main data source by using the Data Source task pane or by dragging a control from the Controls task pane onto a view in the form template. When you drag a control onto a view, InfoPath adds fields and groups to the default data source according to the type of control you are adding. For example, if you drag a text box control onto your form template, InfoPath adds a field to the main data source. In our case, we see three fields added to the default data source since we dragged three text boxes onto our form.  Figure 52 – Our default data source showing our three fields We now want to rename our fields to have them correspond to what our text boxes are intended to contain. Right click on the first text box, and select Text Box Properties as shown in Figure 53. Figure 53 Change the name of the field to From, check the checkbox Cannot be blank and click OK.  See Figure 54. Do the same for the 2nd text box, but enter the field name Message and click OK. Do the same for the 3rd text box but enter the name Completed, but do not check the checkbox Cannot be blank. Our form should look like Figure 55. Figure 54 Also, from the Display tab, check the checkbox Read Only for the Completed text box. We do not want the user to be able to type in the Completed text box. We only want him/her to type in the From and Message text boxes. Figure 55 4.6 - Add a button to our form We will need a button for the user to click after he/she has filled out the form. We add that now.  From the Task Pane on the right, click to get the drop down, and then select Controls from the resulting menu.  Drag a button onto our form as shown in Figure 56. Figure 56 4.7 Preview our form to see how it looks. Click on the Preview button on the menu bar.  The preview should appear as in Figure 57. Figure 57 – Preview showing our red asterisks denoting cannot be blank 4.8 – Change the button title to Submit Right click on the button, and click Button Properties from the menu. Enter the name Submit as shown in Figure 58. Click OK. Figure 58 4.9 – Add a rule to the button to disable it if the text boxes are blank As in typical .NET programming, we need some validation when the button is clicked on the form.  We need to make sure the user entered something in the text boxes.  How about if we disable the button until the text boxes contain something? Right click on the button and click on Conditional Formatting as in Figure 59. Figure 59 On the resulting dialog box, Click Add.  This causes a 2nd dialog to appear as in Figure 60.  Add the condition as shown in the Figure.  Also, note that the checkbox Disable this control is checked.  This means that if either text box is blank, our Submit button will be disabled. Figure 60 – if the condition is true, disable the button We now have to add a rule that says when the Completed text box has a value of “1” (denoting the condition true), then we must disable the button in that case as well.   So, add a second rule as we did for the first, except this time set the Conditional Format to that shown in Figure 61. Figure 61 We can now test the validation by using the Preview button on the menu bar.  In preview mode, add some text to both text boxes.  The button should go from the disabled state to the enabled state as shown in Figure 61. Figure 61 – test our form in preview mode 4.10 – Add a rule to send data to the server when the button is clicked. We now need to configure the button so that it sends data to the server when the button is clicked.  To do that, right click on the button as we have done before, and we get the dialog box as shown in Figure 62. Figure 62 After you click the Rules button as shown in Figure 62, a new dialog will appear. On that dialog click Add to add a new rule. The resulting dialog will appear as in Figure 63. Figure 63 Click on the Set Condition button and a new dialog will appear.  Here we are going to configure the button to send data to the server when the From and Message text boxes are populated and the button is clicked.  Refer to Figure 64. Figure 64 – specify the condition Click OK to get back to the previous dialog. On that dialog click on Add Action.  In the resulting dialog, click on Submit using a Data Connection.  Refer to Figure 65. Figure 65 –specify the action for the condition Now we have to configure the connection.  Click the Add button and a new Wizard will appear as in Figure 66.  Figure 66 –we are going to submit the data to the server Select the defaults as shown in Figure 66 and click Next.  The wizard will move to the next screen as shown in Figure 67.  Figure 67 As shown in Figure 67, select To the hosting environment, such as an ASP.NET page or hosting application.  Then click Next. The wizard will move to the next screen as shown in Figure 68. Figure 68 – accept the default name Accept the defaults as shown in the Figure and click Finish. When the wizard disappears, we need to add another action to the button.  Bring up the dialog as we have done before as shown in figure 69. Figure 69 – adding the action to close the form Click on Add Action, and in the resulting dialog, click on Close the Form from the dropdown. The results should appear as in Figure 70. Figure 70 Keep clicking OK to close out all the dialog boxes.  So, what we have configured is that when the text boxes have text, enable the button. When the button is clicked, submit the data to the server and close the form. 4.11 – Configure the form to receive data from the workflow on load. When the form is submitted, the signer of the card enters text into the From and Message fields that are sent to the server.  Our C# code behind in the workflow will read the data submitted and will cause the task to be changed to the completed state when this happens.   However, the signer of the card could go back to the task list and try to submit the form again.  When he/she clicks the Please sign this birthday card link on subsequent tries on the SharePoint Tasks page, the form will load again, but we want to populate the form on these subsequent loads. This is the case where we want to disable the Submit button on the form, and additionally, we would like to populate the form with the values that were originally submitted by the signer.  We don’t want to simply put up a blank form again. Remember, the form was already successfully submitted and the task was placed in the completed state.   So, to populate the form on subsequent loads, and also disable the Submit button, we need to configure a secondary data connection.  This data connection will be a receive data connection.  Adding the Receive Data Connection NOTE: The creation of the ItemMetaData.xml file described in the following section was created by this author in the Workflow project in Visual Studio 2008, and the xml file is part of the solution files.  It is recommended that you create a Visual Studio Workflow blank project, add an Xml file named ItemMetaData.xml and refer to that file in step 2 below. This tutorial will eventually get to create the workflow in VS2008. Refer to Figure 71. You don’t have to include the file in the project as this author has.  You can simply save it to the directory of your choice if you want to. Figure 71 – The authors VS2008 solution containing the ItemMetaData.xml file We will want to update our task form from the workflow. To send data to the form fields from the workflow, we need to create a receive data connection. For this, we will use a very simple text (XML) file.  As noted above, create an Xml file in Visual Studio 2008. Name it: ItemMetadata.xml. The name is case-sensitive and any other name will not work (Watch the case of the ‘d’ character, it’s lowercase). Inside this file place the following line of text: ,[object Object]
We will create a new correlation token that will be used in every other activity.  We will name that correlation token mainToken.Figure 92 – Right clicking on an activity to get the corresponding properties box In the properties window for each of the activities (other than onWorkflowActivated1), we will type in the name mainToken.  Figure 93 and 94 show the results. Note that we need to type (or cut and paste) in the name mainToken four times, once for each activity below onWorkflowActivated1. Figure 93 – workflowToken is unique to onWorkflowActivated1 Figure 94 – All other activities use mainToken as the name 5.4 – Assign a task ID to createTaskWithContentType as a GUID (Globally Unique Identifier).  We now add a task ID property to the createTaskWithContentType activity. To get the GUID in Visual Studio, click Tools > Create Guid as shown in Figure 95. Note: If your Visual Studio 2008 does not show the Create GUID menu item as shown in Figure 95, refer to Appendix B on how to get it to show up on the menu. Figure 95 Click the radio button as shown in Figure 96 and click Copy.  Then paste the GUID into the taskId property as shown in Figure 97. Figure 96 Figure 97 5.5 – Assign the GUID from Figure 97 to the bottom 3 activities in the design view The procedure we denote here will be repeated three times: one for each of the remaining activities (E.g. onTaskCreated1, onTaskchanged1 and completeTask1). As shown in Figure 98, click on the ellipsis adjacent to the TaskId property for onTask1created.  Figure 98 On the resulting dialog under the tab Bind to an Existing member, under createTaskWithContentType1, click on TaskId.  Refer to Figure 99. Figure 99 Click OK, and the TaskId will now be associated with the taskId GUID from createTaskWithContentType1.  Repeat this process for the remaining two activities. 5.6 – Create a rule for the whileActivity1 So, when the flow gets to the whileActivity1 activity box, what will cause the while loop to exit?  At this point, we have to configure the activity to exit by means of a rule.  The rule we will use is to exit when the value of a variable (which we will create in a moment) changes from false to true.  The variable must be created in the C# code behind and we will name the variable _taskCompleted.  Refer to Figure 100 which shows that we added C# code for the variable.  Figure 100 – we added a new variable called _taskCompleted (defaults to false) Now we can set the rule for the while activity.  As shown in the property pane for whileActivity1, click on the dropdown and click on Declarative Rule Condition. Figure 101 Then, type in the name whileCondition1in the ConditionName field and then click on the resulting ellipsis as shown in Figure 102.  Figure 102 – Add the name, then click the elipses In the resulting dialog box, type in !_taskCompleted for the condition as shown in Figure 103. Then click OK.  Figure 103 5.7 – Try a build: it should be successful At this point, try building the solution.  You should get a successful build with no errors. 5.8 – Add method stubs for the five activities in the design view Now we need to add the method stubs that we will add code to in the code behind.  For each of the activities, double click on each activity in design view. This will cause the stubs to be created for us behind the scenes as shown in Figure 104.  Figure 104 – an empty stub created for all five activities 5.9 – Add the code from Appendix C to the stubs. The entire code for the workflow is shown in Appendix C.  You can cut and paste the code into your solution.  At this point, we will discuss the code blocks in turn. 5.9.1 - onWorkflowActivated1_Invoked         private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e){             workflowId = workflowProperties.WorkflowId;         } In the code created for us by Microsoft, we see that the workflowId is assigned a default GUID when the variable id declared.  We really want that workflowID to be assigned to the same value as the workflowPropertiesId. 5.9.2 – createTaskWithContentType1_MethodInvoking Figure 105 This function is called when the task with content type is created.  Here we want to retrieve the Happy Birthday Card Word document from the workflowProperties list.  It should be noted that there is only one item on the list since we have only 1 document in play at this time (E.g. our Happy Birthday Card document).  Recall that the creator of the card typed in the Assigned To Login Name property in the Word document.  We need to extract that name here and assign the name to a person who must perform the workflow task.  We see that done on line 52.  Once we have the assigned to name, we can create the SPWorkflowTaskProperties object required by the workflow.  This is done on line 54. By specifying the person assigned to the task, the task to sign the birthday card will show up on that persons Task List in SharePoint. 5.9.3 – onTaskChanged1_Invoked Figure 106 This function is called when the task changed event fires.  For our workflow, this event is fired when the signer of the card submits the InfoPath form we created.  This function contains the main code for the workflow.   Lines 92 and 93 fetch the From and Message strings from the InfoPath form.  Note that we have to cast the ExternalDataEventArgs to SPTaskServiceEventArgs to get at these two fields.  Next, on line 98, we try to find our Happy Birthday Card Word document as a SPListItem object. Recall that we need to populate two fields on the Happy Birthday Card Word document that were left blank by the creator of the card.  The two fields are From and Message (which we just got from the InfoPath form on line 92 and 93).  So, we assign those fields to the birthday card on lines 108 and 109.  Now, since the task is completed by the signer, we also set the Completed field in the Word document as well on line 110.  Note that this has nothing to do with the Completed text box in the InfoPath form.  The explanation of how the Completed text box works to disable the Submit button in the InfoPath form is given in Appendix D.  Note that we set the _taskCompleted variable to true on line 111.  Recall we set the while loop condition so that the while loop exits when this value becomes true. This is a critical line of code.  5.9.4 – completeTask1_MethodInvoking Figure 107 This function is called when the while loop exits.  All we want to do here is to start the process of emailing our Happy Birthday Card to the intended recipient.  So, we simply loop through the items in the library (there is only one in this example) and find our word document.  Recall that the missing fields were populated in Figure 106.  When we find the document, we pass it to our SendEmail() function.  5.9.5 – SendEmail Figure 108 This function is used to send the Word Happy Birthday Card to the intended recipient.  Note that our Word document is passed to this function as a SPListItem item, not a Word document object.  Also, notice on line 197 that we obtain the reply to email address from SharePoint.  We configured this in Central Administration  > Operations > Outgoing email Settings as shown in Figure 109.  Also, notice on line 199 that we specify the mail server to be that configured in SharePoint.  In figure 109, that main server is the Outbound SMTP Server, smtp.live.com (which is the mail server for hotmail).   The issue with using Hotmail as the mail server is that the hotmail mail server is locked down to prevent spam.  So, to use it, you have to provide authentication.  The authentication credentials are your hotmail username and password. To provide these credentials, we use the NetworkCredentials object (which is also used with many other things in .NET such as web service proxy authentication).  Also note that we are specifying to use SSL on line 205.  Figure 109 5.9.6 – LogToEventLog Figure 110 To provide logging to the Windows event log, we create our own log named HBEventLog.  We navigate to the event log in Windows 2003 by clicking Start > Administrative Tools > Event Viewer.  Our log is shown in Figure 111.  Figure 111 This concludes the discussion of the C# code.  STEP 6 – CONFIGURE WORKFLOW.XML AND FEATURE.XML IN VISUAL STUDIO So, what is the mechanism by which our InfoPath form is deployed, and what is the mechanism which causes it to be displayed in a SharePoint web page when the signer of the birthday card clicks on the task Please sign this birthday card? (See Figure 6).  The answer is in the files workflow.xml and feature.xml. Refer to Figure 112 which shows our Visual Studio project. Figure 112 There are 3 main steps required for the InfoPath form configuration.   They are: Include the InfoPath form in the Visual Studio Project Configure the file workflow.xml Configure the file feature.cml 6.1 – Include the InfoPath form in the Visual Studio Project The first thing to notice is that we have included our InfoPath form .xsn file in the project. The name is HappyBirthdayForm_one_Published_deployed.xsn.  This form will be deployed as a feature when we click on the Build > Deploy HBWorkflow in Visual Studio. However, we will need to perform steps 2 and 3 for this to happen.  The important thing here is that we include the .xsn file in the project. Recall from 4.15 that we published our .xsn file to a directory on disk.  Simply include that file in the Visual Studio project (right click HBWorkflow > Add > Existing Item). 6.2 - Configure the file workflow.xml Appendix E has the code for the workflow.xml file as does Figure 113.  Figure 113 There are 2 lines of interest here.  They are lines 11 and 15.   Line 11 - We added line 11 with the hexadecimal number as shown.  TaskListContentTypeId needs to be set to the value for your task type. If you do not use a custom task list defined in a content type, you can use the value 0x01080100C9C9515DE4E24001905074F980F93160 as shown.  In our case, we do not use a custom task list so this number will be used as shown.  Line 15 – Remember when we copied our InfoPath form ID to the clipboard in Figure 85?  That is the ID code we put on this line. The other thing to note is the name of the xml tag we place it in.  The tag is ,[object Object]
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare
Tutorial Share Point Happy Birthday Workflow Slideshare

Mais conteúdo relacionado

Mais procurados

Office 365 Productivity Tips -- Mayhem in Minneapolis, The Rematch
Office 365 Productivity Tips -- Mayhem in Minneapolis, The RematchOffice 365 Productivity Tips -- Mayhem in Minneapolis, The Rematch
Office 365 Productivity Tips -- Mayhem in Minneapolis, The RematchChristian Buckley
 
Comparison for Office Versions
Comparison for Office VersionsComparison for Office Versions
Comparison for Office Versionsjessiethe3rd
 
Microsoft Windows Share Point Services Installation Configuration
Microsoft Windows Share Point Services Installation ConfigurationMicrosoft Windows Share Point Services Installation Configuration
Microsoft Windows Share Point Services Installation ConfigurationLiquidHub
 
Share point integration
Share point integrationShare point integration
Share point integrationPeter Diaz
 
Project guideline
Project guidelineProject guideline
Project guidelineAdrian Yi
 
How to create a project dashboard using share point lists
How to create a project dashboard using share point listsHow to create a project dashboard using share point lists
How to create a project dashboard using share point listsGavin Bollard
 
Sales force certification-lab-ii
Sales force certification-lab-iiSales force certification-lab-ii
Sales force certification-lab-iiAmit Sharma
 
Tushar Mahapatra - Portfolio for recent Projects
Tushar Mahapatra - Portfolio for recent ProjectsTushar Mahapatra - Portfolio for recent Projects
Tushar Mahapatra - Portfolio for recent ProjectsTushar Mahapatra
 

Mais procurados (9)

Office 365 Productivity Tips -- Mayhem in Minneapolis, The Rematch
Office 365 Productivity Tips -- Mayhem in Minneapolis, The RematchOffice 365 Productivity Tips -- Mayhem in Minneapolis, The Rematch
Office 365 Productivity Tips -- Mayhem in Minneapolis, The Rematch
 
Comparison for Office Versions
Comparison for Office VersionsComparison for Office Versions
Comparison for Office Versions
 
Microsoft Windows Share Point Services Installation Configuration
Microsoft Windows Share Point Services Installation ConfigurationMicrosoft Windows Share Point Services Installation Configuration
Microsoft Windows Share Point Services Installation Configuration
 
Share point integration
Share point integrationShare point integration
Share point integration
 
Project guideline
Project guidelineProject guideline
Project guideline
 
Bp309
Bp309Bp309
Bp309
 
How to create a project dashboard using share point lists
How to create a project dashboard using share point listsHow to create a project dashboard using share point lists
How to create a project dashboard using share point lists
 
Sales force certification-lab-ii
Sales force certification-lab-iiSales force certification-lab-ii
Sales force certification-lab-ii
 
Tushar Mahapatra - Portfolio for recent Projects
Tushar Mahapatra - Portfolio for recent ProjectsTushar Mahapatra - Portfolio for recent Projects
Tushar Mahapatra - Portfolio for recent Projects
 

Semelhante a Tutorial Share Point Happy Birthday Workflow Slideshare

Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...
Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...
Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...Planet Technologies
 
Extending Your Experience to the Office
Extending Your Experience to the OfficeExtending Your Experience to the Office
Extending Your Experience to the Officegoodfriday
 
XPages - The Ties That Bind
XPages - The Ties That BindXPages - The Ties That Bind
XPages - The Ties That BindMichael McGarel
 
SharePoint 2010 - InfoPath, Workflow
SharePoint 2010 - InfoPath, WorkflowSharePoint 2010 - InfoPath, Workflow
SharePoint 2010 - InfoPath, WorkflowJonathon Schultz
 
20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)
20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)
20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)Christian Buckley
 
Jeff Huber Portfoilio
Jeff Huber PortfoilioJeff Huber Portfoilio
Jeff Huber PortfoilioJeffHuber
 
Sharepoint conference 3 - continental
Sharepoint conference 3 - continentalSharepoint conference 3 - continental
Sharepoint conference 3 - continentalMIchael Carey
 
Cis 407 i lab 1 of 7
Cis 407 i lab 1 of 7Cis 407 i lab 1 of 7
Cis 407 i lab 1 of 7helpido9
 
Gui application for e mail application
Gui application for e mail applicationGui application for e mail application
Gui application for e mail applicationUmesh Mk
 
Link your HTML Form to Google Sheet in just 3 Steps.pdf
Link your HTML Form to Google Sheet in just 3 Steps.pdfLink your HTML Form to Google Sheet in just 3 Steps.pdf
Link your HTML Form to Google Sheet in just 3 Steps.pdfBe Problem Solver
 
Adobe LiveCycle Designer - Getting Started
Adobe LiveCycle Designer - Getting StartedAdobe LiveCycle Designer - Getting Started
Adobe LiveCycle Designer - Getting StartedJeremy Harder
 
Bringing Zest to SharePoint Sites Using Out-of-the-Box Technology
Bringing Zest to SharePoint Sites Using Out-of-the-Box TechnologyBringing Zest to SharePoint Sites Using Out-of-the-Box Technology
Bringing Zest to SharePoint Sites Using Out-of-the-Box Technologyjoelsef
 
20 Microsoft 365 Tips You've Probably Never Used (But Should)
20 Microsoft 365 Tips You've Probably Never Used (But Should)20 Microsoft 365 Tips You've Probably Never Used (But Should)
20 Microsoft 365 Tips You've Probably Never Used (But Should)Christian Buckley
 

Semelhante a Tutorial Share Point Happy Birthday Workflow Slideshare (20)

Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...
Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...
Building End-to-End Solutions Leveraging SharePoint 2010 and Office 2010 Appl...
 
SAP Adobe forms
SAP Adobe formsSAP Adobe forms
SAP Adobe forms
 
Extending Your Experience to the Office
Extending Your Experience to the OfficeExtending Your Experience to the Office
Extending Your Experience to the Office
 
Anusha Padala
Anusha PadalaAnusha Padala
Anusha Padala
 
XPages - The Ties That Bind
XPages - The Ties That BindXPages - The Ties That Bind
XPages - The Ties That Bind
 
SharePoint 2010 - InfoPath, Workflow
SharePoint 2010 - InfoPath, WorkflowSharePoint 2010 - InfoPath, Workflow
SharePoint 2010 - InfoPath, Workflow
 
Report on web development
Report on web developmentReport on web development
Report on web development
 
20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)
20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)
20 Microsoft 365 Productivity Tips That You've Probably Never Used (But Should)
 
Basant Resume
Basant ResumeBasant Resume
Basant Resume
 
Link Embed Import 12-7-2003
Link Embed Import 12-7-2003Link Embed Import 12-7-2003
Link Embed Import 12-7-2003
 
Jeff Huber Portfoilio
Jeff Huber PortfoilioJeff Huber Portfoilio
Jeff Huber Portfoilio
 
Sharepoint conference 3 - continental
Sharepoint conference 3 - continentalSharepoint conference 3 - continental
Sharepoint conference 3 - continental
 
Cis 407 i lab 1 of 7
Cis 407 i lab 1 of 7Cis 407 i lab 1 of 7
Cis 407 i lab 1 of 7
 
Using Technology to Better Manage Your Projects
Using Technology to Better Manage Your ProjectsUsing Technology to Better Manage Your Projects
Using Technology to Better Manage Your Projects
 
CV - Panuwat_Jirapatsakul
CV - Panuwat_JirapatsakulCV - Panuwat_Jirapatsakul
CV - Panuwat_Jirapatsakul
 
Gui application for e mail application
Gui application for e mail applicationGui application for e mail application
Gui application for e mail application
 
Link your HTML Form to Google Sheet in just 3 Steps.pdf
Link your HTML Form to Google Sheet in just 3 Steps.pdfLink your HTML Form to Google Sheet in just 3 Steps.pdf
Link your HTML Form to Google Sheet in just 3 Steps.pdf
 
Adobe LiveCycle Designer - Getting Started
Adobe LiveCycle Designer - Getting StartedAdobe LiveCycle Designer - Getting Started
Adobe LiveCycle Designer - Getting Started
 
Bringing Zest to SharePoint Sites Using Out-of-the-Box Technology
Bringing Zest to SharePoint Sites Using Out-of-the-Box TechnologyBringing Zest to SharePoint Sites Using Out-of-the-Box Technology
Bringing Zest to SharePoint Sites Using Out-of-the-Box Technology
 
20 Microsoft 365 Tips You've Probably Never Used (But Should)
20 Microsoft 365 Tips You've Probably Never Used (But Should)20 Microsoft 365 Tips You've Probably Never Used (But Should)
20 Microsoft 365 Tips You've Probably Never Used (But Should)
 

Último

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 

Último (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 

Tutorial Share Point Happy Birthday Workflow Slideshare