- http://www.k2distillery.com/2009/04/k2-blackpearl-kerberos-configuration.html
- http://blog.myitechnology.com/2008/09/troubleshooting-kerberos-issues.html
Friday, May 29, 2009
K2 Blackpearl: Useful posts to configure ditribuited environment
Wednesday, May 13, 2009
K2 Blackpearl: Set Sharepoint Task List Item Permission by code
- Approvator Box Push
- Collaborator Box Push
where Box Push is my Sharepoint List with my K2 integrated workflow. Because I want to set this permissions when the task item is generated, in this case I cannot use "Sharepoint User Management" [SUM] event because I have the task item ID only when the item is created (see again this post). If you think to use SUM after the SWIC event, you haven't the desired behavior because process instance waits a user action to go on and permissions are set too late. So, to achieve my purpose I needed to write custom code in SWIC event after I get task item ID. In "ExecuteForUser" method body I call a K2 sharepoint web service (installed by K2 on MOSS) used to set permission on generic item (site, list or item list) hosted on MOSS solution. The code to call this service is the follow:
SourceCode.SharePoint.WebServices.K2SPPermissions K2SPPermissionsPRx = new SourceCode.SharePoint.WebServices.K2SPPermissions(); K2SPPermissionsPRx.Url = new K2Uri(MyUrl).FormatURI(true) + "_vti_bin/K2SPPermissions.ASMX"; ADCredentials directoryCredential = new ADCredentials(); K2SPPermissionsPRx.Credentials = directoryCredential.GetCredentials(K2SPPermissionsPRx.Url); K2SPPermissionsPRx.SetSiteWidePermissionsFromXml(XML_FOR_PERMISSION);where MyUrl is the Sharepoint site url. This service gets in input a xml string describing the permissions to assign. An example could be this:
<Group> <Filter> YOUR MOSS SITE </Filter> <SharePointPeopleAndGroupsItem> <Url> <SharePointSite> YOUR MOSS SITE </SharePointSite> <SharePointList>Tasks</SharePointList> <SharePointFolder></SharePointFolder> <SharePointListItem> YOUR ITEM ID </SharePointListItem> <SharePointGroup></SharePointGroup> </Url> <SharePointItemType>SHAREPOINTLISTITEM</SharePointItemType> <UserOrGroupCollection> <UserOrGroup> <LoginName>Approvers Box Push</LoginName> <Type>Group</Type> </UserOrGroup> </UserOrGroupCollection> <K2SharePointItemCollection></K2SharePointItemCollection> <K2UserOrGroupCollection></K2UserOrGroupCollection> <BreakRoleInheritance>True</BreakRoleInheritance> <CopyRoleAssignments>False</CopyRoleAssignments> <RevokeDefinitions>False</RevokeDefinitions> <AssignSiteMemberPermission>False</AssignSiteMemberPermission> <SharePointPermissionCollection> <SharePointPermission> <Name>Full Control</Name> <Type>REVOKE</Type> </SharePointPermission> <SharePointPermission> <Name>Design</Name> <Type>REVOKE</Type> </SharePointPermission> <SharePointPermission> <Name>Manage Hierarchy</Name> <Type>REVOKE</Type> </SharePointPermission> <SharePointPermission> <Name>Approve</Name> <Type>REVOKE</Type> </SharePointPermission> <SharePointPermission> <Name>Contribute</Name> <Type>REVOKE</Type> </SharePointPermission> <SharePointPermission> <Name>Read</Name> <Type>REVOKE</Type> </SharePointPermission> <SharePointPermission> <Name>Restricted Read</Name> <Type>REVOKE</Type> </SharePointPermission> <SharePointPermission> <Name>View Only</Name> <Type>ASSIGN</Type> </SharePointPermission> </SharePointPermissionCollection> </SharePointPeopleAndGroupsItem> </Group>in my particular case I set "View Only" to "Approvers Box Push" group but you can set your desire permissions substituting ASSIGN to REVOKE label. In this way I achieve my purpose, in fact when a user member of Approvers Box Push open a task Item he or she could only view it (see the picture below). These permissions are set only to the item; on the Tasks list, users can add new task item as they want (as showed in the follow picture):
K2 Blackpearl - Get Task List Item in Sharepoint Workflow Integration
string taskIDstring = service.ModifyWorkflowAndGetTaskID(listId, listItemId, workflowInstanceId, modificationID, contextData, ""); // Put task item id into process data field "TaskID" string taskID = taskIDstring.Split(new string[] { "?ID=" }, StringSplitOptions.None)[1]; K2.ProcessInstance.DataFields["TaskID"].Value = taskID;
Friday, April 3, 2009
Disable Virtual Machine Time Bomb
<integration> <microsoft> <components> <host_time_sync> <enabled type="boolean">false</enabled> </host_time_sync> </components> </microsoft> </integration>Obviously, you should open vmc file with editor like notepade...
Monday, March 2, 2009
Update Vitual Machine Additions issue
- Download Windows Installer CleanUp Utility from Microsoft site,
- Install the utility,
- Launch "Windows Installer CleanUp Utility" (Start -> All program -> Windows Installer CleanUp Utility),
- "Windows Installer..." shows a list of all your programs installed on your virtual system,
- Select item "(All user) Virtual Machine Additions [
your version]" like in the figure,
- Click "Remove",
- Click "Ok",
- Re-run Virtual Machine Additions program installation
Monday, February 9, 2009
Declarative Workflow
- A console project which is the entry point of my application;
- A workflow library where put my custom activity and sequence workflow.
<SequentialWorkflowActivity x:Name="Workflow1" xmlns:ns0="clr-namespace:MyWorkflowLibrary.Task; Assembly=MyWorkflowLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow"> <ns0:HelloWorldTask x:Name="helloWorldTask1" /> </SequentialWorkflowActivity>Note that I remove the x:Class attribute in SequentialWorkflowActivity. I do that because I haven't the compiled class in the code behind. In namespace attribute I add the reference to the assembly container of my activity, because this will be resolved at runtime. The console application "Main" looks something like this:
static void Main(string[] args) { // Here, I read my xaml file containing my declarative workflow var xmlReader = new XmlTextReader( new StringReader( File.ReadAllText( @"C:\Users\simonem\Documents\Visual Studio 2008\Projects\ TestWorkflow\MyWorkflowLibrary\HelloWorld.xoml"))); var runtime = new WorkflowRuntime(); runtime.StartRuntime(); runtime.WorkflowCompleted += delegate { Console.WriteLine("WorkFlow completed"); Console.Read(); }; try { var instance = runtime.CreateWorkflow(xmlReader); instance.Start(); } // Here I manage potential workflow validation exceptions catch(WorkflowValidationFailedException wfve) { var errorValidation = string.Empty; foreach (var error in wfve.Errors) { // StringBuilder is better... errorValidation += Environment.NewLine + error.ErrorText; } Console.WriteLine(errorValidation); } // General exceptions catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); }Troubleshooting:
- If during the program execution you receive an error such as "Could not deserialize object. The type 'clr-namespace:MyWorkflowLibrary.Task;.HelloWorldTask' could not be resolved. startIndex cannot be larger than length of string.Parameter name: startIndex" remember to specify the assembly reference in workflow xml code (see below):
<SequentialWorkflowActivity x:Name="Workflow1" xmlns:ns0="clr-namespace:MyWorkflowLibrary.Task; Assembly=MyWorkflowLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
- If you couldn't compile your solution and you receive the following error "Cannot compile a markup file which does not contain declaration of the new workflow type." you must change the build action on your xaml file from "Content" to "None".
Wednesday, February 4, 2009
TFS 2008: TF31002 error workaround...
- Open IIS console,
- Go to "Team Foundation Server" site, and open Authentication feature
- Set "Specific user" property to the account used to install your TFS server (in many other post is named TFSSetup)
Sunday, February 1, 2009
Installing TFS 2008. The final attempt!!!
- Goal:
Scope of this post is the installation of TFS 2008 on Windows Server 2008 and SQL Server 2008. To accomplish this target, I explored varied posts in other blog. Here I put together all the know how as result of my personal experience...
- Before you begin, create your custom TFS iso:
From http://geekswithblogs.net/etiennetremblay/archive/2008/08/11/sql-2008--tfs-2008-sp1-the-lowdownhellip.aspx
[...I used Windows 2008 because this is going to be the prevalent OS to install on when people are going to start fresh or it most likely will. There was a little issue with that install when Windows 2008 RTM’ed back in February and I talked about it in this post. I wanted to see if the WSS issue was resolved in SP1. Well the good news is yes. When installing TFS, the experience is now the same for Windows 2003 and Windows 2008 and to boot, the SP1 now updates the WSS bits on the RTM DVD to WSS 3.0 SP1. Cool.
The problem is SQL 2008 now. You can’t use TFS 2008 RTM to install with SQL 2008. You need to slipstream (or Integrate) the SP on top of the RTM bits. The new install instruction covers this but here is a step by step.
a) Copy the original Media to a folder on any machine say d:\tfs\RTM
b) Extract the SP to a folder say d:\tfs\SPExtract
C:\SP1Download\TFS90SP1-KB949786-ENU /extract:d:\tfs\SP1Extract
c) Create a directory to put the result of the integration in say d:\tfs\ATIntegrated
d) Integrate (slipstream) the SP to the AT install by using this command line (note if you are in Windows 2008 make sure you start you console window as an Administrator or you’ll get prompted by UAC when executing the command).
msiexec /a C:\TFS\RTM\AT\vs_setup.msi /p C:\TFS\SP1Extract\TFS90sp1-KB949786.msp TARGETDIR=C:\TFS\ATIntegrated
e) Once you have done this make sure you copy back the ATIntegrated content to the original AT in the d:\TFS\RTM\AT overriding the original content.
Now you might be tempted to do the same integration with the Build and Proxy directory since they both have a vs_setup.msi file I know I was and actually did. You can’t. I works (well it looks like it does) but when you run the setup, it fails miserably. This is documented by Microsoft to NOT do that for Build and Proxy. You need to install the RTM version and then run the SP on top of it. It would have been nice to have a new DVD with all component SP’ed but it’s not to be.
f) After you have copied back the content to the original RTM directory, just burn a new ISO or DVD and you’re ready to install it.
NOT QUITE…
If you want to have Team Explorer (TE) on your server to create new project like I do, you need to install it BEFORE you install SQL 2008 and apply the TE SP1 also before IF you want to install the client tools as part of the SQL 2008 install which you most likely will to manage backups and verify tables, etc. This problem is fully explained in this KB, Visual Studio 2008 SP1 may be required for SQL Server 2008 installations. If you want to create an all in one server with Studio and Build for example you need to follow the same procedure. ...]
- Account for the Setup:
From http://blogs.devleap.com/rob/archive/2006/03/29/7048.aspx [Sorry, in Italian]
TFSSetup - used to do the TFS setup Administrators Group TFSService - used by the services (code coverage, TFSScheduler, SharePoint Timer), and by application pool Lon On Locally - da Local Security Settings - Local Policies - User Rights Assignment -> Allow log on locally Not in Administrators group for security reason If you are creating a domain account enable "Account is sensitive and cannot be delegated" for security reason TFSReports - used by Reporting Services Lon On Locally - da Local Security Settings - Local Policies - User Rights Assignment -> Allow log on locally Not in Administrators group for security reason By default the created users are in Users group, so they have "Log On Locally" property set. ...]
- Be a man, now you are ready to start
Always from http://geekswithblogs.net/etiennetremblay/archive/2008/08/11/sql-2008--tfs-2008-sp1-the-lowdownhellip.aspx proceed as follows:
[...
i) Windows (2003/2008) + IIS
ii) VSTS and/or TE 2008
iii) SP1 of VSTS and/or TE (it’s the same one that installs for all version of VS/VS Core, you need to run it once for anything component you have installed)
iv) SQL 2008 + Component like DB, RS, AS, Client Tools, etc (follow the install guide instructions, i'll try to post an unattended install file when I have one)
Integration: Set automatic startup ed start SQL Server Agent and SQL Server Browser
v) TFS SP1 (integrated), this will now install WSS properly for both Windows 2003 and Windows 2008 so no need to install it before.
vi) TFS Build + TFS SP1 (which is a different SP then the VS one)
vii) TFS Proxy + TFS SP1 ...]
[...Add NT AUTHORITY\NETWORK SERVICE as a user to the TfsWarehouse database in the SQL Data Engine, and add it to the TfsWarehouseDataReader database role. You can do that manually, or through a SQL script like this (run it from a SQL Management Studio query when connected to the SQL Data Engine):
USE TfsWarehouse CREATE USER [NT AUTHORITY\NETWORK SERVICE] FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] EXEC sp_addrolemember N'TfsWarehouseDataReader', N'NT AUTHORITY\NETWORK SERVICE' ...] ix) Reinstall the VSTS2008 SP1 again...
- Troubleshotting
If during the TFS Setup you have problem with reporting service, check in Reporting Service Configuration that https mode is not set (Web Service URL and Report Manager URL sections).
In my experience I have setup problem with "28805 error". I hope you're more lucky, but in any case I found very useful the following links:
- TFS Installation Error 28805 (http://ozgrant.com/2007/05/13/tfs-installation-error-28805/)
- TFS 2008 and Event Log error 28805 (http://www.jroller.com/wasp/entry/tfs_2008_and_event_log)
- Team Foundation Server (TFS) Installation Errors & Fixes (http://www.schnieds.com/2008/10/team-foundation-server-tfs-installation.html)