Enterprise Content Management

Armedia Blog

Archive for the ‘Enterprise Content Management’ Category

Implementing Multiple Filters in LINQ Query from Visual Studio

September 22nd, 2011 by Tim Lisko

A best practice in any application making data calls is to push processing to the server and limit the amount of data that has to come back to the application.

I recently worked on a windows application that uses the Microsoft SharePoint Client Object Model to manipulate lists and their elements. I needed to filter the lists for processing in the application to just the document libraries that were not hidden, contained at least one item, and were not the “Site Assets” or “Style Library.”

Cleary a situation where filtering is desired. I found it easy to find examples for generating a list with one filter. For example:

1
2
3
4
5
6
7
var web = clientContext.Web;
SP.ListCollection listcoll = web.Lists;

ctx.Load(listcoll,
lists => lists.Include(list => list.Title)
.Where(list => list.BaseTemplate == 101));
ctx.ExecuteQuery();

However, examples on implementing multiple filters such as I needed proved much more challenging. I finally found an example where the implementation used many “.Where” clauses which led to the following attempt.

1
2
3
4
5
6
7
8
...
ctx.Load(listcoll,
lists => lists.Include(list => list.Title)
.Where(list => list.BaseTemplate == 101)
.Where(list => list.ItemCount > 0)
.Where(list => list.Title != "Site Assets")
.Where(list => list.Title != "Style Library")
.Where(list => list.Hidden == false));

Unfortunately this would not even compile in Visual Studio 2010.

I decided to try implementing a more common syntax used in ‘if’ statements – using ‘&&’ to combine multiple conditions but within one .Where.

1
2
3
4
5
6
7
8
...
ctx.Load(listcoll,
lists => lists.Include(list => list.Title, list => list.ItemCount)
.Where(list => list.BaseTemplate == 101 &&
list.ItemCount > 0 &&
list.Title != "Site Assets" &&
list.Title != "Style Library" &&
list.Hidden == false));

YES – Success! Finally, listcoll finally had the libraries I needed.

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

Slides from the CONNtext Webinar

September 21st, 2011 by Allison Cotney

Last week, Armedia held a webinar demonstrating the key features of CONNtext, our solution which allows for Maximo integration with FileNet.

The CONNtext solution enables real-time bi-directional synchronization between IBM’s Maximo Asset Management suite and IBM ECM suite The solution provides the capability to leverage controlled documents to handle asset configuration management in real-time. This is achieved with minimal configuration and requires minimal end-user re-training. CONNtext helps ensure the maintenance staff works with the correct documentation each and every time, eliminating re-work and helping to ensure compliance with regulatory standards. The end result is the effective and efficient utilization of assets along with significantly reducing the risk of fines, penalties, regulatory agency enforced shut-down and catastrophic
failures.

If you are stressing out right now because you missed last weeks webinar demonstrating this innovative solution, don’t worry. Armedia has loaded the slides from the presentation HERE.

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

Content Security: The Forgotten Project Feature

September 2nd, 2011 by khusain

Throughout my many years of experience in the system and software development area, I have noticed one major thing that always seems to be at the top of requirements but becomes relegated to somewhere lower in priority as the project proceeds, only to come back to the forefront as testing and implementation time approach.  This is security.   Even in today’s time, with CISSP and CSSLP professionals everywhere, security seem to still take a back seat in the development process.

Most projects include building security, network security, and various other types of security policies which are generally inherited from the environment where the task is occurring and are fairly defined and stable.  Controlling access to the building, access to the network, access to files and folders, and general access to computing resources are all well established.  However, when we sit down and try to implement some form of security into the software we develop, it gets left out or deferred and needs to be added in at the last moment.  Why is it deferred? Well, how many requirements are really created around security?

Let’s throw a few examples out there:

  • The system will only permit access to authorized users
  • The authorized users will only be allowed to perform tasks they have been granted
  • The authorized users will only be able to see the data they are allowed to work on
  • The system will provide role and group based access controls
  • The system will log all unauthorized access to data (is this security or logging –you decide)
  • The system will log access to all data (Again, security or logging? Well, both)

These are very similar from project to project and pretty high level and very few, usually a dozen or so, but, without them in place, the system is essentially, non-functional.  Well, with the other functional requirements, what the user wants to see and do, which usually number in the hundreds, it’s easy to see why the security component gets little attention.  Except for the initial log-in, the users don’t really experience what is happening in the background, except for an odd warning about doing something they aren’t allowed to do.  A correctly implemented security model won’t even let the user know that features exist beyond what they are permitted to see.  What prevents them from seeing hidden features by glancing over their co-workers shoulder – well, that’s another issue.

So what happens when one of the most critical components of an application is not designed in from the onset? Besides chaos, a lot of redevelopment which is required to implement the missing feature, which leads to missing project deadlines and at worst not meeting implementation times. This is especially true for Fixed Firm Price (FFP) contracts where this can be disastrous to the bottom line, not to mention project failure – after all who will accept a system that cannot meet their basic requirements. Things are changing for the better, as I have seen projects now that have distinct security implementation team which interacts with the other development teams rather than being a side-attraction.

Naturally, for small scale web projects which are usually secured with 2-factor authentication (userid and password), the implementation is fairly simple and can be supported by the OS or a very simple database table.   If, however, you also need to control what the user can do (functionally) once authenticated, it starts becoming complex as you now have to maintain Access Control information for the user as well.  If you now further need to control what data they user can see, use, or modify, the security implementation gets even more complex.   Finally, if you need to implement CAC card integration, IP based authentication, CPU based authentication, or N-factor authentication (more than just a User ID and PWD, such as secure tokens, bio-metric, key-card …) , then additional complexities arise which need to be implemented in code or at the enterprise IT level.  Even now, we still haven’t addressed any encryption and data security requirements that could exist (ie. The system shall encrypt all personal data – does that just mean when it’s stored or also when transmitted??).  It is for this reason that security requirements must get high priority in any project where application, data, and system security are paramount, with the design engaged from the onset of the project.

The actual size of the security team will vary depending on the size of a project, but at least a single resource, with knowledge on all aspects of security (yes all, not just software), should be assigned as the single point of contact.  This person/team, throughout the project, must be involved intimately at the architectural level and will have the final say in any security testing scenarios.  By being involved at the architectural level, no design will be allowed to move forward until the security implementation has been vetted and approved.  Regardless of the security implementation, the primary goal is to confirm that all teams are compliant, which in essence translates to a compliant and secure application.  Whatever tests are needed to validate compliance should be defined during the design process as there is no better way to validate a system then to penetrate it by knowing its internals.  If you know how the security model is implemented and are still unable to compromise it, and then be default, the system is secure.  Open source systems fall into this category since all their code is accessible; everyone knows how to try to gain access, however, due to a well-implemented security model, they cannot.

At this point, we can keep going on about how imperative it is to make security design a high priority in any application design, or for that matter, any system design.  How would you like it if the car you bought didn’t have a lock or key to get it going?  Instead, I’ll just finish up with stressing that security is not a feature that can be put on the back-burner.  Everyone talks about it – you hear about cyber-security everywhere these days, but when it comes to the actual implementation, it gets compromised and inadequately implemented.  Considering that the raw power of computers is such that most systems can be compromised by simple attacks (such as brute force attacks), effort must be put into not just installing measures at the front gate, but beyond that as well to control losses if a breach were to occur.  It is also essential that management personnel understand this when planning a project to account for the level of effort it entails and to ensure that it is effectively budgeted for the entire project duration.

Now that we have addressed the issue of security in software system (and other systems), where do we go from there?  The best security is achieved by informing and teaching the user base, from the users up through the developers and managers.  I have covered a lot of items in this quick prelude to discussing security in information systems, but each should be followed with further details and training.

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

An Insider's Perspective: The CPSC Project

August 30th, 2011 by mseth

It was in the fall of 2010 when I got a call that began my engagement on one of the most interesting projects that I have worked on in recent times.

The situation, the project was with one of the leading product safety regulators in the world.  The international arm of the organization was leading an initiative to create a global information pool for product safety recall information in an effort to make product safety efforts across the world more coordinated and effective.  This would be a one stop, one shop view to “any recall – any where – any time” product safety recall information.

Armedia was asked to perform an initial assessment of what it would take a build a global recall information pool, build a roadmap for the process and structure the approach for the global consortium.  This was a pure play Information Technology (IT) strategy project where the focus was on creating an IT approach to meet a complex business situation.

What I loved about the project was the challenge of a highly unstructured business situation where the project sponsors understood the pain and knew the desirable outcome, but they had little understanding of what needed to be done.

Building an approach for an IT system in the area of product safety was a challenge, as I soon discovered.   Several factors contributed to the challenge, they included,  (a) plethora of legacy IT deployments, (b) changing data structures and data definitions over time, (c) different data structures and definitions across countries, and (d) project execution headwinds (Note: Our team ran into a situation of competing for attention amongst different priorities both within the organization and with 3rd parties outside, in this case the consortium of product safety organizations from other countries).

Sound familiar?

So we walk into the situation not knowing all the pieces of the puzzle and the Armedia team immediately began an assessment of the situation.  Quickly the team structured the analysis into the following topical areas:

  1. Strategic
  2. Governance and Oversight
  3. Functional Scope Definition
  4. Usability, Data Search, and Discovery
  5. Architecture
  6. Deployment and Execution
  7. Operations

Next came a deep dive into each area to develop specific recommendations and a roadmap at a granular level. Data categorizations, normalization and data definitions were all important areas of focus given the complexity of handling these items across different jurisdictions. I believe that our team’s recommendations around this area were excellent and well received by the international community, especially because our approach required minimal impact to current product safety operations, which was a key requirement by the sponsors.

We brought value in terms of providing structure and simplification for execution to what seemed at the outset to be a complex problem.  The Armedia report on “Considerations for Pursuing Global IT Interoperability for Publicly Available Product Recalls ” was published by the OECD (Organization of Economic Development) and has been accepted as the strategic guidance document by the international product safety working party set-up for the purpose of creating the global recall pool. The execution work on report recommendations has started and is currently underway.

This complex business issue was in need of a technology execution plan that was intentionally kept simple, and yet met the unique requirements of the customer. My team and myself guided our efforts in order to meet these criteria, and in the end the Armedia team successfully developed recommendations that provided both strategic and efficient solutions to this international IT challenge.

 

 

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

Maximo Integration: Minding the Engineering and Maintenance Information Gap

August 8th, 2011 by jschivera

Phillip Crosby, notable business man and management theory author, asserted, “If anything is certain, it is that change is certain. The world we are planning for today will not exist in this form tomorrow.” When applied to managing a company’s enterprise asset base, truer words were never spoken .  Change is pervasive and anyone who has ever worked in this environment is aware of the challenges of translating an engineering modification package into actual changes to the physical assets and the maintenance supporting infrastructure.

Closing this information gap is the idea behind the CONNtext solution, bridging the gap between IBM’s Maximo Asset Management and IBM’s FileNet Content Management

Different Lenses and Languages

Engineering and maintenance staff view the their asset worlds through different lenses and languages. When engineers are assigned responsibility for a modification, they are envisioning a future or even abstract state. Typically they think of the change in terms of a system or at a functional level. They need to know the design requirements for the facility, applicable rules and regulations or industry codes , standards and requirements such as licensing basis analyses, specifications and calculations.On the other hand, the maintenance staff view the assets as they exist today, at the discrete component level and beyond.

Engineering conceives the change and is responsible for sending the requirements and instructions for implementing the change in the form of output documents such as installation drawings, specifications and procedures. With a different view of the facility that is function and design driven, engineering is likely not providing the change information with the level of detail that enables the maintenance staff to readily implement and maintain on a component level. In their world, every minute detail about a device is important and must be accounted for in order to properly perform maintenance.

Different Tools

With physical assets and information assets constantly in change and each having their own distinct lifecycles phases, managed in different systems, managed by different sets of people with different lenses, and changed at different times change coordination is a challenge . Engineering typically works within an enterprise content management system (ECM) that captures and stores such documents as design drawings, specifications, calculations, analyses, load studies and other controlled documents.  Within the ECM system the index, search and retrieval function is based on an information classification system derived by the engineering community in terms of how they think and work. What you might not always know is “all” the relationships that exist and are required in order to enact a given change. This knowledge is reliant to some extent on the engineer’s individual knowledge of how things operate on the component level within the plant: the minutiae of the maintenance world.

The maintenance community on the other hand typically uses a physical asset management system that is more focused on work order management. The strength of this type of system is the ability to handle ad hoc processes that span multiple departments. This kind of system assists in long- and short-term planning, preventive, reactive, and condition-based maintenance, schedule management, resource optimization and key performance monitoring. Within this system, maintenance information has been classified by terminology that resonates within their daily operational world.

Framework To Bridge The Gap

Our CONNtext solution was designed to help bridge the gap between different views of the engineering and maintenance and the use of different information management systems by integrating IBM Maximo with IBM FileNet Content Management.

CONNtext operates within the existing user interfaces of Maximo and FileNet, meaning there is minimal user “retraining”. CONNtext employs a document classification filtering scheme that identifies the organizational documents pertinent to maintenance. Once identified, CONNtext is designed to help an organization further group those documents by maintenance terms to create views that enable automating the engineering to maintenance logic into a manageable process.

As a result, the Armedia CONNtext solution bridges the two worlds and users can now:

  • Access engineering drawings and documents within IBM Maximo without having to learn a new system.
  • Receive prompts to ensure that they are working with the most current version of the documents.
  • Have searchable access to unstructured documents within IBM Maximo such as video, pictures, and documentation .
  • Provide regulators with a complete work history of changes on the configuration of assets and their components.
  • Identify loopholes in previously captured document relationships.
  • Gain visibility into other changes and projects in process that are affecting the document that they are currently planning to change.

Armedia’s CONNtext solution has been validated by IBM under the Information Management, Industry Frameworks  and Ready for Tivoli programs.

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

Annotate This!

July 28th, 2011 by cstephenson

Over the past 12 months (or maybe longer) I have been involved with 2 separate projects involved in Alfresco integration with Daeja ViewONE Pro.

Daeja ViewONE Pro is a java applet designed to allow users to apply annotations to any* document.  That is just the starting point.  The applet has been developed whereby an implementer can interact with it via javascript to enhance the user experience.  The implementer can also dynamically change what controls and features are available to a user based upon the user’s role and permissions within the CMS.  I could go on but I would probability end up repeating Daeja’s website :)

Daeja also offers modules to extend the functionality of its offering.  Let’s take a look at the two functionalities that i needed and how Daeja delivered on these needs:

PDF Annotation

For this i used the PDF Module, which adds PDF support to Daeja ViewONE Pro. This allows for users to annotate PDF files in ways that are outside of the way that Adobe offers these services.

Permanent Redaction

The Permanent Redaction module came as a result of clients requiring annotations on documents which, for security purposes, needed them to be burned into the document itself.  A redaction is a special annotation.  When placing a redaction onto a document it’s intended purpose is to obscure the information below.  In other words, make it unreadable, unrecognizable to anyone or anything.  This reminds me of the film Good Morning Vietnam when Adrian Cronauer if given news to read out most of the pages contain black bars.  This is redaction, and in this case permanent redaction. See Example Image Below

Redaction Example

This is where Daeja’s offering of the Permanent Redaction module comes in.  It can take the annotations** on the document, pass them through the Permanent Redaction Module and burn them into the document, producing either a TIFF or PDF as output.  Please do note, it is up to the client and implementer as to how and when the burning takes place and who has access to original content and who has access to burned content.

OK, enough about Daeja.  Back to the projects.

Annotation Example: Project 1

The client was not concerned about maintaining an annotations file.  They simply wanted all redactions to be burned into the document and for the document to be versioned (so as to maintain a history of redactions).  This was to support redacting PII (Personally Identifiable Information) in support of FOIA (Freedom of Information Act) requests. In this case all documents being handled were PDF.  If you remember one of the output options of Permanent Redaction was PDF.  This made it simple in that each new version was the result of burning.  This greatly simplified the model around security.

The burning process can be implemented in 2 ways, on-demand and background processing, and the client wanted the burning process to be on-demand.

On implementing the burning process it was determined to run this in a separate Tomcat instance from Alfresco.  Not knowing how frequently documents were be worked on and knowing that the size of some of these PDF’s could in fact be over 200Mb in size offloading this to another instance seemed to be the correct way to go.  Daeja provide example code on how to implement the burning process but it is up to the implementor to customize this for the particular environment this is intended for.

This leads me nicely into Alfresco and it’s numerous API’s.  One of the many strengths of Alfresco is it’s numerous API’s which help with the flexibility of integration.  There is RESTful, Web Services, JavaScript, Java Foundation, JCR, etc. etc.  One of the common questions asked is ‘which API should I use?’.  For the Permanent Redaction integration, the implementer opted for a combo if Web Scripts and Web Services.  Web Scripts are awesome.  If the language you are using for integration can make an HTTP request then you can use Web Scripts.  Web Scripts are simple to implement, follow an MVC approach, support multiple inputs (think overloading) and support multiple outputs (need HTML, JSON or something returned?).  If the JavaScript API does not provide enough, it can be extended at the service level and exposed at the JavaScript.

Now, you may ask if they are so awesome why use Web Services as in combination with Web Scripts.  The issue for this client was the size of the PDF file.  Potentially 200Mb or more.  This is a limitation of Web Scripts in that uploading large files is a memory / performance hit.  This is the main reason Web Services was included in the combo.  As part of Web Services there is a highly optimized set of functions for streaming content into the repository.  Thankfully Alfresco also included the ability to share the authentication token between the different API’s!  To summarize for this client, Daeja ViewONE Pro is integrated into Alfresco.  When a document is opened for redaction, the applet is rendered to the browser through a custom webscript.  When the user clicks on the ‘burn’ button, the noderef of the document is sent to the Permanent Redaction instance running in the separate Tomcat instance, along with the annotation data.  The custom code running under the Permanent Redaction instance fetches the document from the repository via webscripts, applies the annotations and burns them into a new PDF.  This PDF is uploaded to the repository as a new version of the starting document.

Annotation Example: Project 2

The second project followed more of the traditional annotation model.  The client wanted the ability to annotate documents based upon content type, content format and user role and permissions.  One of the requirements was to NOT version the document.  To be honest, requirement I like.  The document itself is not changing so why constantly version it?  The way Daeja works is it maintains a separate content file with the annotations.  The initial integration  of Daeja and Alfresco was by Dr. Qu (Alfresco) and further continued by Jared Ottley (Alfresco).  This initial integration includes a basic annotation content model which associates the annotation file to the document as a child association.  Simple and effective.  The one thing that was annoying me for this client, it would be nice to version the annotations applied to the document so that there was a visual history.  Using the power of Web Scripts and Free Marker a template was created to list versions of the annotation file associated with a document, if it has one.

Some more information on Daeja is the ability to specify a server side script, cgi, etc. the call when the annotation save button is pressed.  Web Scripts are invoked via HTTP.  This means the Daeja save annotation button can invoke a custom webscript.  This webscript adds the versional aspect to the annotations file (if it is not already attached) then versions the annotation file.  This webscript also attached the Free Market template to the document to provide access to the versioned annotation files.  When clicking on a previous annotation this opens the document with the specified annotation and displays this in Daeja ViewONE Pro.  Oh, and this is in read only mode so that previous versions cannot be rewritten!

The other more interesting requirement was each annotation added to the document also needed text below this annotation to indicate who created it and when. Daeja provides this functionality as a tooltip but for compliance reasons this needed to be added to the document to be seen visually and not as a tooltip.  Unfortunately Daeja does not provide this capability (though it has now been logged as a feature request and has gotten their boffins pondering on it).  In the meantime a workaround was provided, again highlighting the flexibility of Daeja.  The applet provides events which can have custom coded attached to them.  In this instance when a save annotation takes place and event is triggered.  It was then possibly to have custom javascript be invoked on this event.  This is were the fun started and flash backs to maths and geometry classes happened.

It should be noted the user/date label being applied to the document was actually an annotation.  Annotations must be on the document and not fall outside the page boundaries.  This meant some calculations were needed to determine the location of the annotation and to decide if the label would be applied below or above the annotation.  The next consideration was how close to the right hand margin was the annotation.  I would like to say some complex mathematical formula was implemented but it was some simple maths that came to the rescue.  Actually this functionality is most likely cause for another blog as there are other things to consider.

This project was different to the first project but both were great learning experiences in the areas of annotation and redaction and what clients are looking for.  It has provided great information and ideas on what else could be done in the area of integration to provide even more cool integration features.

*currently Daeja supports over 300 document types!

**TIFF and PDF support a subset of annotations which can be burned into the document.

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

I'm in eRoom, Get Me Out of Here!

July 27th, 2011 by cstephenson

[turns up amplifier, cranks up volume to 11, puts Huey Lewis and the News vinyl on record player....]
I start up Visual Studio 6.0 and settle down to some nostalgic programming with Visual Basic (VB) 6.  Ah, college memories come flooding back and strangely not many related to actual study.  I feel like I have stepped back in time – the processor has worked its speed up to 88 mph and now I am back using VB6.  I also remember learning Delphi Version 1.0 so that I could *help* a friend do their final year project. Good times.

(more…)

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

Debugging SharePoint 2010 Enterprise Edition Upgrade

June 28th, 2011 by Tim Lisko

I’ve been doing my SharePoint development and testing using a locally installed instance of SharePoint. I originally installed my development environment following the instructions found in the MSDN library: ”Setting Up the Development Environment for SharePoint 2010 on Windows Vista, Windows 7, and Windows Server 2008” which is basically the foundation level version.

This version of SharePoint was fine for quite a while, but the day came that I needed to create and test features that are found at the Standard or Enterprise levels. The good news is that you can install SharePoint Enterprise on top of your current installation and preserve the work you have already done (well, almost as I will explain later).

Unfortunately this installation wasn’t terribly smooth. It might have gone easier if I had stopped the SharePoint services and IIS, but the installation does this so that probably would not make any difference.

SharePoint installation files come with a configuration xml file. The  MSDN article I referenced above instructs you to add a tag within that file to enable installation on a windows client. I did that but the installation failed with some error about missing Office parts. I forgot that, in my original installation, I edited my configuration file to look like the xml file example in the MSDN article. So, after uninstalling SharePoint and editing the  configuration file again the installation went fine. Even better, when I launched SharePoint it opened up my original site!

So far, so good. Now to check on the Content Organizer feature, which was what I was primarily interested in.

Horrors! That feature wasn’t there! I rebooted and to my relief the Content Organizer feature appeared. So, going to my site features admin page I click the feature to activate it. That action generated an error:


The Site scoped feature being activated has a dependency on hidden Site Collection scoped feature ‘FeatureDefinition/0c8a9a47-22a9-4798-82f1-00e62a96006e’ (ID: ’0c8a9a47-22a9-4798-82f1-00e62a96006e’). Hidden features cannot be auto-activated across scopes. There may be one or more visible Site Collection scoped features that auto-activate the dependent hidden feature.


What?! A file search came up with a Feature.xml file for the Document Routing Resources Feature. In that file there was a Hidden property set to “True.” After changing that to “False” (turns out the setting should be “True” which I corrected later) I tried the activation again. Got a little further – the error message clued me to enable the Enterprise Features in Document Collection. I went back through both “Manage Site Features” and “Site Collection Features” to make sure everything that might relevant was checked. Still not able to enable the Content Organizer feature.

OK, what to do next? In Central Admin (Update and Migration) I checked the “Enable Enterprise Features” link – the feature set was set to Enterprise, so that was OK. I noticed then the link for “Enable Features on Existing Sites.” Ahhh – that looked promising.  I checked the “enable” option and “OK.” The message back indicated success! Checking my site I found the Content Organizer was activated,  but then trying to add a content rule caused an error. Also when I deactivated the feature I could not reactivate it!

Looking at my Site Settings I noticed other anomalies: I saw “Navigation” rather than “Top Link Bar” under the “Look and Feel” section. I didn’t see “Term Store management” under “Site Administration.” So there was more wrong here than just the feature I was immediately interested in.

I next tried to create a new site based on the “Document Center” template knowing that Content Organizer would be one of the features. That failed completely with a message similar that I got when trying to enable the Content Organizer. I could create a Team Site, so SharePoint was not entirely broken.

One last thing I thought to try before completely uninstalling SharePoint. I deleted the Document Collection on my site. I then created a new Document Collection.

Finally – success! All the expected site features were there and they worked! I lost the work invested in my original site, but luckily it was more of a testbed so that was not a complete disaster for me.

So, removing the document collection for the root site fixed all the issues that appeared after updating my development SharePoint environment to the Enterprise Edition. It is an extreme action, though not as extreme as uninstalling and reinstalling SharePoint. I’m pretty sure that you can save your document collection and redeploy using some admin tools, but I’m not terribly familiar with them and  as I mentioned I wasn’t too concerned about losing the site. I had a couple other sites on the server that I deleted, so I don’t know if the enterprise features would have worked on them after removing the document collection on the root. That might be interesting to investigate.

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

Project Estimating: Lesson Learned

June 23rd, 2011 by Scott Roth

Hi, this is Scott Roth.  I am new to Armedia and Armedia’s blog.  I have been watching the past few weeks as Dave, Tim and Judy have shared their cutting edge technology lessons learned with you.  Personally, I have found these posts incredibly insightful and had to scurrying off to Google more than once to figure out what exactly they were talking about.  Well, this post won’t be that technical.  In fact, this post won’t be technical at all.

I’ve been in the software development business for 20 years.  Over the course of those years I have been involved in a lot of proposals, project plans, project re-plans, and estimating exercises.  I have used a variety of approaches and processes from very rigid, overly-documented approaches, to looser, Agile approaches to develop estimates.  One thing I have seen, regardless of the approach, is that project plans rarely reflect reality.  I have observed three frequent oversights when  developing estimates that always seem to bite project teams once reality meets the plan.

  • Developers will spend 5% of their time every week on project management activities.  Time and budget are not usually allocated to developers to attend status meetings or company staff meetings, write input for the project manager’s weekly report, mentoring, or help with business development efforts, but it happens.  So, figure that 2 hours of every week will be consumed by activities of this type.
  • Developers (especially those on the customer site) will spend another 5% of their time attending impromptu meetings,
    attending  ad hoc JAD design meetings, giving demos, supporting the project manager or customer, or dealing with customer drive-by meetings.
    Again, these are not activities easily anticipated or scheduled, but they occur all the time, and can negatively affect project performance.  Figure that 2 hours every week will be consumed by activities of this type.
  • Developers new to a project need time to get up to speed on the project, the requirements, the environment, the tools, the processes and practices, the rhythm of development, and the project culture.  Don’t expect developers — even senior, seasoned developers — to be 100% productive from day 1.  Expect that it will take at least 40 hours for a developer to settle into the project  before he will be as productive as the rest of the team.  Schedule tasking accordingly.

I know it doesn’t seem like much, but over the course of a 5 week sprint, a team of 5 could lose 100 hours to these otherwise “invisible tasks”!  And, adding team member #6 will not immediately improve performance.

I mention these things because when I (and I suspect most project planners) sit down to estimate development times, we tend to estimate in a vacuum.  What I mean is, when asked how long it will take to develop Widget X or complete Requirement Y, we tend to give estimates that assume a perfect environment, the steady state of the universe, and that developers never get distracted by other project activities.  Or, that developers can be dropped into running projects and be 100% productive from the word “go”.

Hedging your task estimates by 10% and easing new developers into running projects can give your project plans a little buffer and more accurately reflect reality.  This advice will certainly not be popular with project managers or business development folk who continually strive for lower costs.  However, it may be to everyone’s advantage — yours and your customer’s — to produce a realistic project plan that can be met, as opposed to apologizing half way through the project that you have run out of resources for no ascertainable reasons.

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare

Using SP Designer 2010 to Add Custom Buttons

June 21st, 2011 by Tim Lisko

Sharepoint Designer  2010 provides a great quick way to add simple actions to your SharePoint application.

I have a project that I wanted to add a couple buttons that would allow the user to navigate away from a “Drop-Off” library to the libraries where files are directed by my content organizer rules. So, without thought to SP Designer I opened my VS 2010 and commenced to coding. The great thing about building your buttons in VS is the flexibility you have – but being so flexible means you have to build a lot even if you only want a little!

In this instance I only wanted my buttons in one library. Using VS2010 you start with an elements.xml file. Unfortunately the elements file can only point to a “type,” not a specific library or list. So, even though I only wanted to see my buttons in my “Drop Off” document library, all the document libraries would also display the buttons. You can certainly get around that by omitting the type and buttons and code them in or setting visibility, but I haven’t done that myself so I was less interested in getting the coding right and figuring out where to insert the coding.

Enter SharePoint Designer 2010. It provides an easy nterface for creating custom actions that aren’t complex. You can create buttons that will navigate to a form, initiate a workflow, or navigate to a URL. Even better, it only applies to the document library or list where you are adding the custom action – exactly what I wanted!

You can certainly add an image to your button – this was something I overlooked initially and was driving me crazy that I “couldn’t” add a button image! Well, of course you can add an image. Just move that scrollbar down on the side of the “Create Custom Action” screen to get to the “Advanced custome action options” – duh!

So, a couple limitations right off:

  • You can’t create tabs, groups, or context groups with SP Designer so far as I can see
  • SP Designer placed my buttons in the “Manage” group of the “Documents” tab. There does not appear to be anyway to direct your buttons to a specific ribbon group or tab that you might prefer.

In this case the SP Designer provided all the functionality I needed and saved me time I would have spent coding, testing, and deploying!

TwitterFacebookLinkedInStumbleUponPinterestGoogle+DeliciousDiggPrintFriendlyShare
Copyright © 2002–2011, Armedia. All Rights Reserved.