Nebulae Spiral

Spiralling Golden… and maybe blogging about code.

YouTube – Martin Luther King, Jr. on War

without comments

Written by Nebulae

August 22nd, 2008 at 12:07 pm

Posted in personal

SPList Factory – singleton access to your lists.

with one comment

A few months ago I was doing a refresher in GOF design patterns.  I have a couple favorites: memento, observer, state, and the factory of course :-)

So I was trying to implement these patterns in a conceptual SPAL ( sp access layer ), and what I’ve found is that having a SPListWrapper object, and a factory to create them and allow static access is *the bees knees*, especially if you want to implement an ajax interface.  Since you only load the list once, its pretty speedy too.

I absolutely love ajax and making the sharepoint interface more robust and seamless.  Any interface for that matter.  there is a library i use exclusively that covers all browsers and addresses the issues found in each of them, even the pesky ie memory leak.

What Im getting at is that I have a bunch of cool stuff to share that probably would become convoluted in a mass array of blog entries, so I think it would be worthwhile to vlog it.  stay tuned, could take a  few days while.

Written by Nebulae

August 6th, 2008 at 1:17 pm

xkcd – A webcomic of romance, sarcasm, math, and language – By Randall Munroe

without comments

Written by Nebulae

August 6th, 2008 at 10:38 am

Posted in personal

Tagged with

Paris Hilton Responds to McCain Ad from Paris Hilton, Chris Henchy, and Adam “Ghost Panther” McKay

without comments

See more Paris Hilton videos at Funny or Die

Written by Nebulae

August 5th, 2008 at 9:35 pm

Posted in personal

sunshine

without comments

a pack of wild butterflies just flew through my yard,
the morning glories are jealous.

Written by Nebulae

August 3rd, 2008 at 4:15 pm

Posted in personal, random

Tagged with , ,

Save Conflict in workflow on SPListItem.Update or SystemUpdate

with one comment

in this scenario, I have a really simple workflow that creates a task, does some infopath approval stuff, then copies that list item to another list. the kicker is when you want to add something about that copied item to the original item, say an id column so you have a reference. after saving the copy, you set a column on the original and try to update the listitem, and get a “save conflict” error.

Ive seen a lot of posts on this error, most of them point to not having access to that listitem because its locked by the workflow itself. I would assume that you can somehow capture the item before the workflow updates it, and set the properties you want. could someone enlighten me if this is true? I’ve seen posts saying to use a delay, to wrap it in a repeating try / catch until the item is unlocked, to try programmatically to check it out, and then save it. I can’t see any of this as being best answer.

What Ive decided is to attach an event handler to the second list to set the id in the first. this seems to be pretty reliable, plus I already had an event handler on that list. I’m really curious to know if there’s a resolution for this.

other info on this issue:
http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/641b40fb-614f-4266-95c0-d61c2f443146/

Written by Nebulae

August 1st, 2008 at 2:16 am

Posted in code

Tagged with , , ,

I think I should start painting.

without comments

I have visions of abstract spirals I can’t find in any art on ebay. anyone else? I’m thinking red and black with a grey borders, mathematically perfect yet chaotic. very large. and planetary. I would attempt it with photoshop, but I don’t think my brain works that way very well. There is something to be said with creating something physically with your hands, as opposed to a kbd+clicker thing. I have some vacation time coming to me, Id like to see what I can come up with. I wanna see what life without code is for long enough to get used to it :)

life without email would sorta kick ass. you know what does kick ass? kexp.

what am i doing here…
alt+t enter w enter space alt+tab F5 F10 F10 F10 F5? repeat?

Written by Nebulae

August 1st, 2008 at 1:44 am

Posted in personal

Tagged with , , ,

I will stop switching themes now.

with 2 comments

this is the one.  Until I finish my own. 

Crazy day.  Today ( yesterday? ) was my daughters 10th birthday.  I remember thinking when she was born that this day would come, although I never really believed it. 

This means I will be 30 soon. 

There are quite a few things I thought I would have done by 30… and I have done quite a few of them.  I did not predict my state of mind very well, however.  I am far more mentally stable than I thought I would be, far less expressive with my creativity though.  Hence, the blog.  The chance to wax poetic again when the mood strikes me, the chance to vent and express and connect and maybe even offer my brain to the masses if the request is made of me.  intellectual aspects aside, however, now is the time to focus on my physical being.  I feel less drive to be physically active now than ever before, but I don’t blame that on age as much as where my focus has been: work. 

Except for the last weeks, I have been focused on nothing but work for years.  I have let everything else take the back seat, especially over my personal relationships.  I could dissect that, but playing personal therapist from such a self critical point of view is probably more damaging than healthy.  There is no past, there is no future, there is only the now, and maybe the preparation for the next now. 

The 711 by my house kicks ass.  Its the one right across from the $3 theatre, and the guys that work there are about as rad as they come.  I have had my bags carried out to my car, random interesting conversations, even free slurpees.  They treat everyone that way.  The music is always cranked, the flower pots are blooming, and you’re greeted with a warm welcome whenever you walk in.  So strange to find in seattle.  The owner in particular, that man is being the change i want to see.  Its all out there, you can see it if you pay attention.  it would be much easier if all humans had name tags that said either “enlightened” or “not there yet”. 

puscifer, anyone?

 

Do you ever have the urge to completely open yourself up?  to become completely unguarded and honest and trusting as you are capable of?  To go into the world every day with the intention to leave a wake of positivity and hope? I feel this so intensely lately, so completely and deeply that it may even be coming off as forced.  I wonder if i can come up with an algorithm to calculate the degrees of lattitude between manifestation and force, because I am sure there’s a difference but I can’t put my finger on it.  I bet there’s a variance that has something to do with the current moon phase.

Written by Nebulae

July 30th, 2008 at 4:32 am

Posted in personal

Tagged with , , , ,

Body Moving

without comments

Your body is not a thing separate from your Self, it is the physical manifestation of who you are. You are much more vast than your body can hold at this time—but your body is a manifestation of the aspect of yourself that you are concerned with at this time and place. Take a moment and breathe into your feet, feel the seat beneath you, feel your eyes focus as you read the words on this page (yes you can feel your eyes focus, if you take notice).

The other misunderstanding is about unconditional love. Unconditional love it not forced love. There is nothing forceful about it. It is love allowed, it is acceptance. Unconditional love of your body is loving acceptance for your body, no matter what your body looks like or feels like.

Body Moving.

Written by Nebulae

July 29th, 2008 at 11:43 pm

Posted in Uncategorized

Sharepoint Workflow – When you just can’t create a task.

without comments

I’ve been writing sharepoint applications for quite some time.  In fact, I consider myself pretty damn good at it.  Somehow though, I’ve been able to avoid writing much workflow all this time.  Event Handlers have been all I needed to this point.

I’ve never wanted to beat my head into a wall so much as this last weeks adventure into workflow.  The infamous Julie kremer, who i hold in the highest of esteem as a friend and teacher, wrote a workflow for the OfficeLive app that Ive been working on for the last 5 or so months ( I think we’re on version 5 at this point, we iterate fast ) that takes a solution submitted by a small business owner and kicks off a workflow to have it approved before it shows up in the small business portal search – http://www.officelivepartnerdirectory.com.

My task is to create a workflow that the company object will pass through for approval. The goal is to catch any offensive company names or logos from showing up in the portal. This seems pretty easy, logistical, shouldn’t be a problem right?

Well, right off the bat I was getting an exception in mscorlib

Exception has been thrown by the target of an invocation.
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at System.Workflow.Activities.CallExternalMethodActivity.Execute(ActivityExecutionContext executionContext)
   at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext)
   at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext)
   at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)
   at System.Workflow.Runtime.Scheduler.Run()

I added a fault handler to the workflow and bubbled up the inner exception to see what the deal was:

private void code_HandleAllExceptions_ExecuteCode(object sender, EventArgs e)
{
    WriteException(faultHandlerActivity1_Fault1, "An error was handled by fault hander. " + faultHandlerActivity1_Fault1.InnerException);
}
private static void WriteException(Exception e, string message)
{
    WriteTrace("CompanyWF ERROR: " + message + " " + e.Message + "\n" + e.StackTrace, "ERROR");
}
 
private static void WriteInfo(string message)
{
    WriteTrace("CompanyWF: " + message, "INFO");
}
 
private static void WriteTrace( string message, string level )
{
    Trace.WriteLine("["+DateTime.Now+"] " + message, level);
}

which then reported a null reference exception:

[4120] ERROR: [7/25/2008 10:36:46 AM] CompanyWF ERROR: An error was handled by fault hander. System.NullReferenceException: Object reference not set to an instance of an object.
[4120]    at Microsoft.SharePoint.Workflow.SPWorkflowTask.SetWorkflowData(SPListItem task, Hashtable newValues, Boolean ignoreReadOnly)
[4120]    at Microsoft.SharePoint.Workflow.SPWinOETaskService.UpdateTaskInternal(Guid taskId, SPWorkflowTaskProperties properties, Boolean fSetWorkflowFinalize, Boolean fCreating, HybridDictionary specialPermissions)
[4120]    at Microsoft.SharePoint.Workflow.SPWinOETaskService.CreateTaskWithContentTypeInternal(Guid taskId, SPWorkflowTaskProperties properties, Boolean useDefaultContentType, SPContentTypeId ctid, HybridDictionary specialPermissions)
[4120]    at Microsoft.SharePoint.Workflow.SPWinOETaskService.CreateTask(Guid taskId, SPWorkflowTaskProperties properties, HybridDictionary specialPermissions) Exception has been thrown by the target of an invocation.
[4120]    at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
[4120]    at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
[4120]    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
[4120]    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
[4120]    at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
[4120]    at System.Workflow.Activities.CallExternalMethodActivity.Execute(ActivityExecutionContext executionContext)
[4120]    at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext)
[4120]    at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext)
[4120]    at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)
[4120]    at System.Workflow.Runtime.Scheduler.Run()

One of the properties I was trying to push into the ExtendedProperties propertybag was null, I changed that and we were past this exception. The lesson here is to grab the InnerException of your fault handler and hope that it returns something descriptive, i guess :-)

In case you are wondering, the trace viewer i use is called DebugView, brought to my attention by the industrious Eric Jobin.

Another issue I was having with the InfoPath form though, was quite a bit harder to track down, but a stupid mistake in the long run.  I was creating a link to the infopath form with an item id in the query string, but it was the wrong item, wrong list :-)  The error I was getting was something extremely vague and Sharepointy, but what helped me figure it out was enabling (in a google friendly fashion) – verbose sharepoint  exception reporting – verbose sharepoint error handling – full Moss exception handling – good enough.

This is a lot easier than you might think, and you’ve probably done this before with other web applications you’ve needed to debug.  Open the Web.Config for your spsite and find:

<SharePoint>
    <SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">

and change it to:

<SharePoint>
    <SafeMode MaxControls="200" CallStack="true" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="true">

then find the node:

<system.web>
    <customErrors mode="On" />

and set it to “Off”

you may have to recycle your app pool before changes take effect, but you should now see a stack trace when you cause an error – hopefully more helpful than the generic Unknown Exception that we had all come to love.

peace, and happy coding…
trinity

Written by Nebulae

July 27th, 2008 at 2:41 pm

Posted in Uncategorized

Tagged with , ,