Share Point 2007 Interview Preparation

Embed Size (px)

Citation preview

  • 8/8/2019 Share Point 2007 Interview Preparation

    1/23

    Sharepoint 2007 ( MOSS ) Interview preparation

    - What does AllowUnsafeUpdates do ?

    If your code modifies Windows SharePoint Services data in some way, you may need to allow unsafe updates on the Web site, without requiring a

    security validation. You can do by setting the AllowUnsafeUpdates property. C#:

    ?

    1

    2

    3

    4

    5

    6

    78

    9

    10

    using(SPSite mySite = newSPSite("yourserver"))

    { using(SPWeb myWeb = mySite.OpenWeb())

    {

    myWeb.AllowUnsafeUpdates = true;

    SPList interviewList = myWeb.Lists["listtoinsert"];

    SPListItem newItem = interviewList.Items.Add();

    newItem["interview"] = "interview";newItem.Update();

    }

    }

    - What does RunWithElevatedPrivileges do?

    Assume that you have a Web Part in which you want to display information obtained through the Windows SharePoint Services object model, such as

    the name of the current site collection owner, usage statistics, or auditing information. These are examples of calls into the object model that

    require site-administration privileges. Your Web Part experiences an access-denied error if it attempts to obtain this information when the

    current user is not a site administrator. The request is initiated by a nonprivileged user. you can still successfully make these calls into the

    object model by calling the RunWithElevatedPrivileges method provided by the SPSecurity class. C#:

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    SPSite siteColl = SPContext.Current.Site;

    SPWeb site = SPContext.Current.Web;

    SPSecurity.RunWithElevatedPrivileges(delegate()

    {using(SPSite ElevatedsiteColl = newSPSite(siteColl.ID))

    {

    using(SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

    {

    stringSiteCollectionOwner = ElevatedsiteColl.Owner.Name;

    stringVisits = ElevatedsiteColl.Usage.Visits.ToString();

    stringRootAuditEntries = ElevatedSite.RootFolder.Audit.GetEntries().Count.ToString();

    }

    }});

  • 8/8/2019 Share Point 2007 Interview Preparation

    2/23

    - What is a SharePoint Feature? What files are used to define a feature?

    A SharePoint Feature is a functional component that can be activated and deactivate at various scopes throughout a SharePoint instances.

    Scopes include

    y Farmy WebApplicationy Site (site collection)y Web (site)

    Features have their own receiver architecture, which allow you to trap events such as when a feature is

    y installingy uninstallingy activatedy deactivated

    The element types that can be defined by a feature include

    y menu commandsy

    link commandsy page templatesy page instancesy list definitionsy list instancesy event handlersy workflows

    The two files that are used to define a feature are

    y feature.xmly manifest file(elements.xml)

    The feature XML file defines the actual feature and will make SharePoint aware of the installed feature. The manifest file contains details about

    the feature such as functionality.

    Common stsadm commands associated with feature are

    y stsadm -o installfeaturey stsadm -o uninstallfeaturey stsadm -o activatefeature

  • 8/8/2019 Share Point 2007 Interview Preparation

    3/23

    y stsadm -o deactivatefeature

    - What are content types ?

    A content type is a flexible and reusable WSS type definition that defines the columns and behavior for an item in a list or a document in a

    document library.

    For example,

    -you can create a content type for a customer presentation document with a unique set of columns, an event handler, and its own document

    template.

    -You can create a second content type for a customer proposal document with a different set of columns, a workflow, and a different document

    template.

    Then you can attach both the contenttypes to a document library, which allows you to capture metadata based on the contenttype selected during

    creation of the document.

    Content type can be created by the following

    y from the rootweb of a site collection, go to Site Action > Site Settings > Galleries > Site content typesy using a feature

    5. Workflow can be applied to what all elements of SharePoint ?

    While workflow associations are often created directly on lists and document libraries, a workflow association can also be created on a content

    type that exists within the Content Type Gallery for the current site or content types defined within a list.

    In short, it can be applied ...

    y At the level of a list (or document library)y At the level of a content type defined at site scopey At the level of a site ( Sharepoint 2010 )

    - What are the ways to initiate the workflow ?

    y Automatic (on item added or item deleted)y Manual (standard WSS UI interface)y Manual (Custom UI Interface)y Programatically through custom code

  • 8/8/2019 Share Point 2007 Interview Preparation

    4/23

    7. What are the types of input forms that can be created for a workflow ?

    You can create four different types of input forms including an association form, an initiation form, a modification form, and a task edit form.

    Note that these forms are optional when you create a workflow template.

    8. What are ways to create input forms for workflow ?

    Two different approaches can be used to develop custom input forms for a WSS workflow template.

    y You can create your forms by using custom application pages, which are standard .aspx pages deployed to run out of the _layouts directory.( disadv: lot of code required when compared to Infopath approach)

    y using Microsoft Office InfoPath 2007 (disadv: picks up a dependenct on MOSS, i.e. it cannot run in a standalone WSS environment)

    9. What is the difference between method activity and event activity in WF ?

    A method activity is one that performs an action, such as creating or updating a task. An event activity is one that runs in response to an

    action occurring.

    10. What does SPWeb.EnsureUser method do?

    Checks whether the specified login name belongs to a valid user of the Web site, and if the login name does not already exist, adds it to the Web

    site. e.g SPUser usr = myWeb.EnsureUser("mmangaldas");

    11. While creating a Webpart, which is the ideal location to Initialize my new controls ?

    Override the CreateChildControls method to include your new controls. To make sure that the new controls are initialized.. call

    'EnsureChildControls' in the webparts Render method. You can control the exact Rendering of your controls by calling the .Render method in the

    webparts Render method.

    12. How to query from multiple lists ?

    Use SPSiteDataQuery to fetch data from multiple lists. more details..

    13.How Does SharePoint work?

  • 8/8/2019 Share Point 2007 Interview Preparation

    5/23

  • 8/8/2019 Share Point 2007 Interview Preparation

    6/23

  • 8/8/2019 Share Point 2007 Interview Preparation

    7/23

  • 8/8/2019 Share Point 2007 Interview Preparation

    8/23

    1

    2

    3

    4

    C#:

    oSPSite = new SPSite("http:/server");

    oSPWeb = oSPSite.OpenWeb();

    - What does a SPWebApplication object represent?

    The SPWebApplication objects represents a SharePoint Web Application, which essentially is an IIS virtual server. Using the class you can

    instigate high level operations, such as getting all the features of an entire Web Application instance, or doing high level creation operations

    like creating new Web Applications through code.

    - Would you use SPWebApplication to get information like the SMTP address of the SharePoint site?

    Yes, since this is a Web Application level setting. You would iterate through each SPWebApplication in the SPWebApplication collection, and then

    use the appropriate property calls (OutboundMailServiceInstance) in order to return settings regarding the mail service such as the SMTP address.

    Side Question: I got asked if there are other ways to send emails from SharePoint. The answer is yes, there is. You can use the SendMail method

    from the SPutility class to send simple emails, however it is not as robust as using the System.Net.Mail functionality since it doesnt allow

    things like setting priorities on the email.

    - How do you connect (reference) to a SharePoint list, and how do you insert a new List Item?

    ?

    1

    2

    3

    4

    5

    67

    8

    9

    10

    11

    12

    C#:

    using(SPSite mySite = newSPSite("yourserver"))

    {

    using(SPWeb myWeb = mySite.OpenWeb())

    {

    SPList interviewList = myWeb.Lists["listtoinsert"];SPListItem newItem = interviewList.Items.Add();

    newItem["interview"] = "interview";

    newItem.Update();

    }

    }

    - How would you loop using SPList through all SharePont List items, assuming you know the name (in a string value) of the list you want toiterate through, and already have all the site code written?

  • 8/8/2019 Share Point 2007 Interview Preparation

    9/23

    ?

    1

    2

    3

    4

    56

    C#:

    SPList interviewList = myWeb.Lists["listtoiterate"];

    foreach(SPListItem interview ininterviewList)

    {

    // Do Something}

    - How do you return SharePoint List items using SharePoint web services?

    In order to retrieve list items from a SharePoint list through Web Services, you should use the lists.asmx web service by establishing a web

    reference in Visual Studio. The lists.asmx exposes the GetListItems method, which will allow the return of the full content of the list in an XML

    node. It will take parameters like the GUID of the name of the list you are querying against, the GUID of the view you are going to query, etc.Side Question: I got asked how I built queries with the lists.asmx web service. In order to build queries with this service, one of the

    parameters that the GetListItems method exposes is the option to build a CAML query. There are other ways to do this as well, but that was how I

    answered it.

    - What is the difference between an Internet and an intranet site?

    An internet site is a normal site that anyone on the internet can access (e.g., www.msn.com, www.microsoft.com, etc.). You can set up a site foryour company that can be accessed by anyone without any user name and password.

    An intranet (or internal network), though hosted on the Web, can only be accessed by people who are members of the network. They need to have a

    login and password that was assigned to them when they were added to the site by the site administrator

    - What are the various kinds of roles the users can have?

    A user can be assigned one of the following roles

    y Reader - Has read-only access to the Web site.y Contributor - Can add content to existing document libraries and lists.y Web Designer - Can create lists and document libraries and customize pages in the Web site.y Administrator - Has full control of the Web site.

    - How customizable is the user-to-user access?

  • 8/8/2019 Share Point 2007 Interview Preparation

    10/23

    User permissions apply to an entire Web, not to documents themselves. However, you can have additional sub webs that can optionally have their

    own permissions. Each user can be given any of four default roles. Additional roles can be defined by the administrator.

    Can each user have access to their own calendar?

    Yes there are two ways to do this,

    y by creating a calendar for each user, ory by creating a calendar with a view for each user

    - Can SharePoint be linked to a SQL database?

    This is possible via a custom application, but it not natively supported by SharePoint or SQL Server.

    - What does partial trust mean the Web Part developer?

    If an assembly is installed into the BIN directory, the code must be ensured that provides error handling in the event that required permissions

    are not available. Otherwise, unhandled security exceptions may cause the Web Part to fail and may affect page rendering on the page where the

    Web Part appears

    - How can I raise the trust level for assemblies installed in the BIN directory?

    Windows SharePoint Services can use any of the following three options from ASP.NET and the CLR to provide assemblies installed in the BIN

    directory with sufficient permissions. The following table outlines the implications and requirements for each option.

    Option Pros Cons

    Increase the trust level for the entire

    virtual server. For more information, see"Setting the trust level for a virtual

    server"

    Easy to implement.

    In a development environment, increasing the trust level allows you

    to test an assembly with increased permissions while allowing you

    to recompile assemblies directly into the BIN directory without

    resetting IIS.

    This option is least secure.

    This option affects all assemblies used by the virtual server.

    There is no guarantee the destination server has the required trust level. Therefore,

    Web Parts may not work once installed on the destination server.

    Create a custom policy file for your

    assemblies. For more information, see

    "How do I create a custom policy file?"

    Recommended approach.

    This option is most secure. Requires the most configuration of all three options.

  • 8/8/2019 Share Point 2007 Interview Preparation

    11/23

    An assembly can operate with a unique policy that meets the

    minimum permission requirements for the assembly.

    By creating a custom security policy, you can ensure the destination

    server can run your Web Parts.

    Install your assemblies in the GAC

    Easy to implement.

    This grants Full trust to your assembly without affecting the trust

    level of assemblies installed in the BIN directory.

    This option is less secure.

    Assemblies installed in the GAC are available to all virtual servers and applications on

    a server running Windows SharePoint Services. This could represent a potential

    security risk as it potentially grants a higher level of permission to your assembly

    across a larger scope than necessary

    In a development environment, you must reset IIS every time you recompile

    assemblies.

    Licensing issues may arise due to the global availability of your assembly.

    - When retrieving List items using SharePoint Web Services, how do you specify explicit credentials to be passed to access the list items?

    In order to specify explicit credentials with a Web Service, you generally instantiate the web service, and then using the credentials properties

    of the Web Service object you use the System.Net.NetworkCredential class to specify the username, password, and domain that you wish to pass when

    making the web service call and operations.*** Side Question: I got asked when you should state the credentials in code. You must state the credentials you are going to pass to the web

    service before you call any of the methods of the web service, otherwise the call will fail.

    - What is CAML, and why would you use it?

    CAML stands for Collaborative Application Markup Language. CAML is an XML based language which provides data constructs that build up the

    SharePoint fields, view, and is used for table definition during site provisioning. CAML is responsible for rending data and the resulting HTML

    that is output to the user in SharePoint. CAML can be used for a variety of circumstances, overall is used to query, build and customize

    SharePoint based sites. A general use would be building a CAML query in a SharePoint WebPart in order to retrieve values from a SharePoint list.

  • 8/8/2019 Share Point 2007 Interview Preparation

    12/23

  • 8/8/2019 Share Point 2007 Interview Preparation

    13/23

  • 8/8/2019 Share Point 2007 Interview Preparation

    14/23

    - What types of SharePoint assets can be deployed with a SharePoint feature?

    Features can do a lot. For example, you could deploy

    y Simple site customizationsy Custom site navigationy WebPartsy pagesy list typesy list instancesy event handlersy workflowsy custom actions

    - What are event receivers?

    Event receivers are classes that inherit from the SpItemEventReciever or SPListEventReciever base class (both of which derive out of the abstract

    base class SPEventRecieverBase), and provide the option of responding to events as they occur within SharePoint, such as adding an item or

    deleting an item.

    - When would you use an event receiver?

    Since event receivers respond to events, you could use a receiver for something as simple as canceling an action, such as deleting a document

    library by using the Cancel property. This would essentially prevent users from deleting any documents if you wanted to maintain retention of

    stored data.

    - What base class do event receivers inherit from?

    Event receivers either inherit from the SPListEventReciever base class or the SPItemEventReciever base class, both which derive from the abstract

    base class SPEventReceiverBase.

    - If I wanted to not allow people to delete documents from a document library, how would I go about it?

    You would on the ItemDeleting event set: properties.Cancel= true.33) What is the difference between an asynchronous and synchronous event receivers?

  • 8/8/2019 Share Point 2007 Interview Preparation

    15/23

    An asynchronous event occurs after an action has taken place, and a synchronous event occurs before an action has take place. For example, an

    asynchronous event is ItemAdded, and its sister synchronous event is ItemAdding.

    - How could you append a string to the title of a site when it is provisioned?

    In the OnActivated event:

    ?

    1

    2

    3

    SPWeb site = siteCollection.RootWeb;

    site.Title += "interview";

    site.Update();

    - Can an event receiver be deployed through a SharePoint feature?

    Yes.

    - What is a content type?

    A content type is an information blueprint basically that can be re-used throughout a SharePoint environment for defining things like metadata

    and associated behaviors. It is basically an extension of a SharePoint list, however makes it portable for use throughout an instance regardlessof where the instantiation occurs, ergo has location independence. Multiple content types can exist in one document library assuming that the

    appropriate document library settings are enabled. The content type will contain things like the metadata, listform pages, workflows, templates

    (if a document content type), and associated custom written functionality.

    - Can a content type have receivers associated with it?

    Yes, a content type can have an event receiver associated with it, either inheriting from the SPListEventReciever base class for list levelevents, or inheriting from the SPItemEventReciever base class. Whenever the content type is instantiated, it will be subject to the event

    receivers that are associated with it.

    - What two files are typically (this is kept generally) included when developing a content type, and what is the purpose of each?

    There is generally the main content type file that holds things like the content type ID, name, group, description, and version. There is also

    the ContentType.Fields file which contains the fields to include in the content type that has the ID, Type, Name, DisplayName, StaticName,

    Hidden, Required, and Sealed elements. They are related by the FieldRefs element in the main content type file.

  • 8/8/2019 Share Point 2007 Interview Preparation

    16/23

    - What is an ancestral type and what does it have to do with content types?

    An ancestral type is the base type that the content type is deriving from, such as Document (0x0101). The ancestral type will define the metadata

    fields that are included with the custom content type.

    - Can a list definition be derived from a custom content type?

    Yes, a list definition can derive from a content type which can be seen in the schema.XML of the list definition in the element.

    - When creating a list definition, how can you create an instance of the list?

    You can create a new instance of a list by creating an instance.XML file.

    - What is a Field Control?

    Field controls are simple ASP.NET 2.0 server controls that provide the basic field functionality of SharePoint. They provide basic general

    functionality such as displaying or editing list data as it appears on SharePoint list pages.

    - What base class do custom Field Controls inherit from?

    This varies. Generally, custom field controls inherit from the Microsoft.SharePoint.WebControls.BaseFieldControl namespace, but you can inherit

    from the default field controls.

    - What is a SharePoint site definition? What is ghosted (uncustomized) and unghosted (customized)?

    SharePoint site definitions are the core set of functionality from which SharePoint site are built from, building from the SiteTemplates

    directory in the SharePoint 12 hive. Site definitions allow several sites to inherit from a core set of files on the file system, although appear

    to have unique pages, thereby increasing performance and allowing changes that happen to a site propagate to all sites that inherit from a site

    definition. Ghosted means that when SharePoint creates a new site it will reference the files in the related site definition upon site

    provisioning. Unghosted means that the site has been edited with an external editor, and therefore the customizations are instead stored in the

    database, breaking the inheritance of those files from the file system.

    - How does one deploy new SharePoint site definitions so that they are made aware to the SharePoint system?

  • 8/8/2019 Share Point 2007 Interview Preparation

    17/23

    The best way to deploy site definitions in the SharePoint 2007 framework is to use a SharePoint solution file, so that the new site definition is

    automatically populated to all WFEs in the SharePoint farm.

    - What is an ancestral type and what does it have to do with content types?

    An ancestral type is the base type that the content type is deriving from, such as Document (0x0101). The ancestral type will define the metadata

    fields that are included with the custom content type.

    - Can a list definition be derived from a custom content type?

    Yes, a list definition can derive from a content type which can be seen in the schema.XML of the list definition in the element.

    - When creating a list definition, how can you create an instance of the list?

    You can create a new instance of a list by creating an instance.XML file

    - What is a Field Control?

    Field controls are simple ASP.NET 2.0 server controls that provide the basic field functionality of SharePoint. They provide basic general

    functionality such as displaying or editing list data as it appears on SharePoint list pages.

    - What base class do custom Field Controls inherit from?

    This varies. Generally, custom field controls inherit from the Microsoft.SharePoint.WebControls.BaseFieldControl namespace, but you can inherit

    from the default field controls.

    - Can multiple SharePoint installs point to the same DB?

    Multiple SharePoint installs can use the same database server. Not literally the same database on that server. That server must be SQL Server

    2000 or SQL Server 2005. It cannot be Oracle or another vendor.

    - How to create links to the mapped network drives?

  • 8/8/2019 Share Point 2007 Interview Preparation

    18/23

  • 8/8/2019 Share Point 2007 Interview Preparation

    19/23

  • 8/8/2019 Share Point 2007 Interview Preparation

    20/23

    WebPart design interface so that they can display whatever string of text they desire.

    Each custom property that you have must have the appropriate get and set accessor methods.

    - What are ClassResources? How do you reference and deploy resources with an ASP.NET 2.0 WebPart?

    ClassResources are used when inheriting from the SharePoint.WebPart.WebPartPages.WebPart base class, and are defined in the SharePoint solution

    file as things that should be stored in the wpresources directory on the server. It is a helpful directory to use in order to deploy custom

    images. In ASP.NET 2.0, typically things such as images are referenced by embedding them as resources within an assembly. The good part about

    ClassResources is they can help to eliminate recompiles to change small interface adjustments or alterations to external JavaScript files.

    - What is a SharePoint Solution File? How does it differ from WebPart .cab files in legacy development? What does it contain?

    A SharePoint solution file is essentially a .cabinet file with all a developers ustom componets suffixed with a .wsp extension that aids in

    deployment. The big difference with SharePoint solution files is is that a solution:

    allows deployment to all WFEs in a farm

    is highly manageable from the interface allowing deployment, retraction, and versioning

    Can package all types of assets like site definitions, feature definitions (and associated components), Webparts, etc.

    Can provide Code Access Security provisioning to avoid GAC deployments

    And much more..

    - What is a .ddf file and what does it have to do with SharePoint Solution creation?

    .ddf file is a data directive file and is used when building the SharePoint solution bundle specifying the source files and their destination

    locations. The important thing for someone to understand is that the .ddf file will be passed as a parameter to the MAKECAB utility to

    orchestrate construction of the SharePoint solution file.

    - What file does a SharePoint solution package use to orchestrate (describe) its packaged contents?

    The solution Manifest.XML file.

    - What deployment mechanism can you use to instigate Code Access Security attributes for your WebParts?

    SharePoint solution files can add in order to handle code access security deployment issues. This is done in the element in the SharePoint

    solution manifest.XML, which makes it easier to get assemblies the appropriate permissions in order to operate in the bin directory of the webapplication.

  • 8/8/2019 Share Point 2007 Interview Preparation

    21/23

    - When would you use an event receiver?

    Since event receivers respond to events, you could use a receiver for something as simple as canceling an action, such as deleting a document

    library by using the Cancel property. This would essentially prevent users from deleting any documents if you wanted to maintain retention of

    stored data.

    - What base class do event receivers inherit from?

    Event receivers either inherit from the SPListEventReciever base class or the SPItemEventReciever base class, both which derive from the abstract

    base class SPEventReceiverBase.

    - If I wanted to not allow people to delete documents from a document library, how would I go about it?

    You would on the ItemDeleting event set: properties.Cancel= true.

    - When running with SPSecurity.RunWithElevatedPrivileges (web context) what credentials are being used?

    In a web context, this is the application pool identity. In a timer job and workflow, this will be the 'Windows SharePoint Timer Services'

    identity.

    - When should you dispose SPWeb and SPSite objects? And even more important, when not?

    You should always dispose them if you created them yourself, but not otherwise. You should never dispose SPContext.Current.Web/Site and you

    should normally not dispose SPWeb if IsRootWeb is true. More tricky constructs are things along the line of SPList.ParentWeb.

    Also dispose each web when iterating over SPWeb.Webs

    Also dispose SPLimitedWebPartManager's SPWeb property (.web)

    - What bugs have you found in SharePoint? And what did you do to work around them?

    - What base classes do event receivers inherit from?

    SPListEventReceiver, SPItemEventReciever, and SPWebEventReceiver inherit from the abstract base class SPEventReceiverBase.

    SPWorkflowLibraryEventReceiver inherits from SPItemEventReceiver.

    SPEmailEventReceiver inherits directly from System.Object.

  • 8/8/2019 Share Point 2007 Interview Preparation

    22/23

    - What are the built in ways to backup a SharePoint install?

    A: Through the central administration and the stsadm command

    - (more advanced) You've created and deployed a Web Part, when you deploy to the server you get a page saying your Web Part couldn't be loaded,

    click here to go to the Web Part maintenance page, etc. to disable the web part. What step(s) should you take to get a stack dump from your web

    part instead of that error page?

    Go to the web.config file for your website and find the CallStack Attribute in the SafeControls element and set the value to true

    - How would you programmatically retrieve a list item?

    SPQuery and SPSiteDataQuery. Bonus points for knowledge of CrossListQueryCache, PortalSiteMapProvider. Negative points for use of foreach.

    - What are the data types which are supported as Lookup column in SharePoint.

    Only Single Line of Text and Calculated columns are supported as lookup columns.

    - how can debugging share point application and timer jobs ? with steps?

    1. build application place .dll into gac and reset iis2. On the Debug menu, select Attach to Process3. select the Show processes from all users check box.4. select W3W.exe and OSWTIMER.exe can attach5. refresh sharepoint site point break point

    - what is web part?

    Web Parts are the fundamental building blocks for Share Point user interface, and with them we can build and integrate many different types of

    applications.In share point also be create custom web part using .oscx control

    steps create custom web part

  • 8/8/2019 Share Point 2007 Interview Preparation

    23/23

    1. create web part project copied .oscx control and build application.place .dll file in GAC .reset IIS.2. go 12 hive _layout folder create folder past your .oscx control3. go inetpub ->wwwroot->wss->open Your site ->web con fig->create safe control write assembly information of web part application4. open sharepoint site ->site action-site editing->Galleries ->web part->new Add your web part.

    follow few web part in WSS 3.0

    Content Editor Web Part

    Data View Web Part

    List View Web Part

    Image Web Part

    Members Web Part .

    Page Viewer Web Part

    - What are the advantages of SharePoint Portal Services (SPS) over SharePoint Team Services (STS)?

    harePoint Portal Services (SPS) has MUCH better document management. It has check-in, check-out, versioning, approval, publishing, subscriptions,

    categories, etc. STS does not have these features, or they are very scaled back. SharePoint Portal Services (SPS) has a better search engine, and

    can crawl multiple content sources. STS cannot. STS is easier to manage and much better for a team environment where there is not much Document

    Management going on. SPS is better for an organization, or where Document Management is crucial.