Are you attending Channel Link? This is the place to learn about the Tech Data programs and processes, and network with the colleagues in our industry. Let us know if you are going to be there – would be great to meet and explore business synergies – info@revasolutions.com.
Channel Link is the one channel event where you can network and build relationships while learning practical new skills and knowledge to build your business. The agenda is packed with leadership content dynamically delivered through Peer Discussion Groups and Business Connection Workshops where you can actively participate as you learn and exchange ideas.
Reva Solutions is a leading Systems Integration company that is focused on providing business solutions to the North American market using industry leading Enterprise Content Management (ECM) products such as Microsoft SharePoint to help companies improve productivity, lower costs and to meet compliance regulations. Our team has the skills and experience to effectively strategize, design, implement and support all aspects of an ECM solution including: Document Management, Records Management, Workflow / Business Process Management, Document Capture, Search and eDiscovery.
Attending Tech Data’s Channel Link
April 6th, 2012 by Eswar EluriTech Data Partner
April 6th, 2012 by Eswar Eluri
We at Reva Solutions are excited to announce our entry into the Value Added Distributor Network with our new partner, Tech Data. We will be working hand-in-hand with Tech Data in providing solutions for our clients, with a focus around the Oracle platform.
As one of the world’s largest wholesale IT distributors, Tech Data is the conduit through which the power of technology flows to the world. In fiscal year 2011, we sold $24 billion of IT products to more than 125,000 technology resellers in over 100 countries. Every day these resellers depend on us to help them cost-effectively support the technology needs of end users of all sizes, including small- and medium-sized businesses, large enterprises, educational institutions, government agencies, and consumers.
Reva Solutions is a leading Systems Integration company that is focused on providing business solutions to the North American market using industry leading Enterprise Content Management (ECM) products such as Microsoft SharePoint to help companies improve productivity, lower costs and to meet compliance regulations. Our team has the skills and experience to effectively strategize, design, implement and support all aspects of an ECM solution including: Document Management, Records Management, Workflow / Business Process Management, Document Capture, Search and eDiscovery.
ORACLE Gold Partner
April 6th, 2012 by Eswar Eluri
Partner Status with Oracle. We will bring our expertise in Enterprise Content Management to the Oracle product suite. The Reva Specialization will focus on Oracle’s WebCenter, but will also encapsulate the best of end-to-end solutions, incorporating hardware, database, business intelligence, capture, and other elements as are fit to meet the needs of our clients.
With more than 380,000 customers—including 100 of the Fortune 100—and with deployments across a wide variety of industries in more than 145 countries around the globe, Oracle offers an optimized and fully integrated stack of business hardware and software systems that helps organizations overcome complexity and unleash innovation.
Reva Solutions is a leading Systems Integration company that is focused on providing business solutions to the North American market using industry leading Enterprise Content Management (ECM) products such as Microsoft SharePoint to help companies improve productivity, lower costs and to meet compliance regulations. Our team has the skills and experience to effectively strategize, design, implement and support all aspects of an ECM solution including: Document Management, Records Management, Workflow / Business Process Management, Document Capture, Search and eDiscovery.
Configuring Tomcat 6 for HTTPS
April 14th, 2011 by Praveena KillamsettyTo install and configure HTTPS(SSL) support on Tomcat 6, you need to follow these simple steps:
1.Create a certificate keystore by executing the following command: %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
2.Now you will prompted for a keystore password give it as ‘changeit’.
3.Next, you will be prompted for general information about this Certificate, such as company, contact name, and so on.
4.Finally, you will be prompted for the key password, which is the password specifically for this Certificate . You MUST use the same password here as was used for the keystore password itself.
5.After the end of it a keystore will be generated in “drive”:\Documents and Settings\”username”\.keystore
6.The next step is to configure the Connector in the $CATALINA_HOME/conf/server.xml file, where $CATALINA_HOME represents the base directory for the Tomcat 6 instance
<Connector
port=”9080″ maxThreads=”200″ protocol=”org.apache.coyote.http11.Http11Protocol”
scheme=”https” secure=”true” SSLEnabled=”true”
keystoreFile=”C:/Documents and Settings/dmadmin/.keystore” keystorePass=”changeit”
clientAuth=”false” sslProtocol=”TLS”/>
<Listener className=”org.apache.catalina.core.AprLifecycleListener”
SSLEngine=”off” />
7. Restart Tomcat and navigate to https://{MachineName}:9080
8.You might be prompted with a Security Alert.
Click on View Certificate ans Install the Certificate. Your tomcat homepage should show up in secured format.
LDAP-Documentum Configuration & Troubleshooting Tips
July 12th, 2010 by Zainab MantriConfigure LDAP with Documentum.
Here are the screen shots of step by step configuration of LDAP with Documentum. It might differ depending on how you want to sync your users and groups in Active Directory with Documentum.
Go to Documentum Administrator (DA) -> Administration -> Basic Configuration -> LDAP Servers. Click on File-> New-> LDAP Server Configuration. More detailed notes can be found in the Documentum Administrator User Guide under the section of Basic Configuration.
After doing the LDAP configuration go to the Server Configuration and enable the correct LDAP server
Run the LDAP job to synchronize the users and groups. Few key points and common errors:
- It is always one way sync. The LDAP job will never update anything in Active Directory.
- If the user enters a wrong password 3 times the account will be locked out as it authenticates the password with AD. The account then needs to be unlocked by the System Administrator.
- The LDAP job checks the user_name & the user_os_name. If the user_name in Documentum does not match exactly with the user_name in AD, it will throw an error. For example; if a user name in AD is Sarah McLaughlin and for some reason the user_name was created as Sarah Mclaughlin in Documentum and their user_os_name is the same the job will not synchronize. The solution for this is to reassign the user’s name to match exactly with AD. The only problem with the reassign tool is that it runs a DQL to update all the objects which are currently owned by the old user_name and reassigns them to the new user_name, hence updating the r_modify_date & r_modifier. You can run the LDAP sync job after running the Reassign User Job and see that it runs through perfectly.
- After you run the LDAP job and on checking the log file and there is an error about a .cnt file not found you should do the following. Go to the path which is given in the log file. It should be E:\Documentum\dba\config\<docbase_name>\ ldap_0800a184802036ef.cnt. There should be older files with a different object id. Recreate a file which the job is asking for and run the job again. It should run fine now. If an older file does not exists just create a blank file with the name and run the job.
- The main attributes to check if a user fails to update through LDAP are: user_login_domain, user_source, user_ldap_dn & user_global_uniue_id. You should check these values with a user that is working correctly.
- If an user’s id fails even though it has the correct user_name and the error says that cannot update user as user is already configured in a separate domain you should do the following.
- Go to IAPI and fetch the user that is failing: retrieve,c,dm_user where user_name = ‘xxx’
- dump,c,l
- check the user_global_unique_id
- It should be testAD:3acb0b81-1dd211b2-80d9af5c-40c9a950.
- If it is not then this is what is causing the error.
- set,c,l,user_global_unique_id = ‘testAD:’
- Run the job again and check if the user has been configured successfully and user_global_unique_id is set correctly.
Here are some of the LDAP tools that can be used for debugging purposes. These can be downloaded easily and installed. They are free
- dsa.msc
- adsiedit.msc
- Softerra LDAP Browser
These 2 tools do not show the Deleted Users folder in AD. When an user is deleted in AD it remains in the Deleted Users folder for a given period of time after which it is permanently deleted. Documentum pools this folder and updates the user state as Inactive.
Other tools:
- ldp.exe
- adexplorer.exe show the Deleted Objects folder.
With certain tools you might have to specify the distinguished name “cn=Deleted Objects,DC=iol,DC=xxx,DC=net” when you connect because default connections usually connect to 1 of the 3 partitions in active directory, the domain, schema or configuration DN’s
Full Refresh
In the event to perform a full refresh of LDAP data, utilize the a_last_run attribute as follows to achieve it.
Note: a_last_run is defined as a string not a datetime field. LDAP Synchronization will not produce the desired results if the word “null” is present in this attribute.
Go to IAPI and run the following commands
retrieve,c,dm_ldap_config
set,c,l,a_last_run
save,c,l
Trace
You can turn on the tracing on the LDAP job by setting the trace level to 10 and viewing the trace file after the job has completed. Right click on the job in DA and click on View Trace File. You can also check the job report for errors or validation.
LDAP Job Through Command Prompt
You can also run the LDAP job through command prompt.
Go to the directory where Documentum is installed (E:\Documentum\product\6.5\bin) and then run the job:
E:\Documentum\product\6.5\bin>java com.documentum.ldap.LDAPSync -docbase_name xxx -user_name xxx -password xxx -full_sync true -method_trace_level 10 -group_save_limit 1000 -rename_user_option true -rename_group_option true -deactivate_user_option true >> C:\ldapsync_MSAD.log
SQL Formatting Tips for Documentum
April 6th, 2010 by Zainab MantriSometimes we want to play directly with the underlying database or generate outputs in tabular format. It can easily be done in dql (Documentum Query Language) and then imported into Microsoft Excel. SQL does not generate tabular output and needs to be tweaked a little to get the desired results.
Here are some tips:
- Set autocommit off. This will enable you to verify the changes and doing a rollback if you feel that the changes are not good enough.
- SQL updates do not affect the modify date & modifier so if you are sure of the data that needs to be modified and wish to save the modify date etc use SQL. SQL updates can be done even when the documents are checked out.
- For every object type, there are 2 tables and 2 views that you’ll find useful. For dm_sysobject, the tables are: dm_sysobject_s and dm_sysobject_r, while the views are dm_sysobject_sv and dm_sysobject_rv. The naming conventions are easy enough to remember, appending _s for all the single-value attributes, _r for all the repeating attributes, and an extra v if it is a view. The regular tables only allow you to deal with attributes that weren’t inherited (i.e. r_object_type is not available for dm_document_s because it is inherited from dm_sysobject_s). However, the views will allow you to select all inherited attributes as columns. So if you were doing a select, it would be more convenient to use views, but if you are doing an update, then you are stuck with the regular table and would have to join the tables.
- The column that all 4 of tables share is the r_object_id attribute, so you will be using this in the join condition. I also highly recommend using aliases all the time because it will save you a lot of headaches. Here is a simple example to find how many my_persons have their best friend as one of their friends. A little useless, but it might be a query to verify if your data is consistent.
select count(a.r_object_id) from my_person_sv a, my_person_rv b where a.r_object_id = b.r_object_id and a.bestfriend = b.friends;
- If you want to access more than one repeating attribute, even for the same object type, you have to do another join with that repeating table. So we extend the previous example by adding the constraint that the best friend is a colleague. It is easy to see how repeating attributes can be quite a pain.
select count(a.r_object_id) from my_person_sv a, my_person_rv b, my_person_rv c where a.r_object_id = b.r_object_id and a.r_object_id = c.r_object_id and a.bestfriend = b.friends and a.bestfriend = c.colleagues;
- Speaking of joins, the real pain is when you want to do an update join. I can’t figure out the best way to do this in Oracle SQL, but here are some ways of doing it. This example will set some attribute by looking up a code in a control list if and only if that code exists in the control list.
update my_type_s a
set a.some_attribute = (select the_new_attribute b from my_control_list_s b where a.code = b.code)
where exists (select 1 from my_control_list_s where a.code = b.code);
The exists part performs a subquery for each occurrence and will be a source of slowdown, but if you need joined attributes in the where clause, then sometimes there might not be a better alternative. Of course, in some cases (such as this) there are ways to tweak the query in this way:
update my_type_s a
set a.some_attribute = (select the_new_attribute from my_control_list_s b where a.code = b.code)
where a.code in (select b.code from my_control_list_s b);
- Don’t insert or remove repeating attributes in SQL unless you absolutely know what you are doing. Feel free to update them to other values, but anything else is better left for a DQL query.
- If you are running queries in batch, use SET DEFINE OFF; to prevent ‘%’ or special characters from being treated as substitution variables.
- You can print the results to a file by spooling the data. spool C:\temp.txt. After the output is done use spool off;
- SET HEADING OFF will give you a clean output with the headings only once rather than being repeated every now and then.
- set linesize 1000; (Calculate the total length of all the attributes and the line size should be more than that else it will wrap the data.)
- set colsep “,”. (This will generate the output file with the columns separated by a ‘,’. When you will import this file in Microsoft Excel you can import it using the delimiter as ‘,’. You can use any colsep value like tab, ; , |, etc)
- set pagesize 50000; (The value of PAGESIZE is the number of output lines to be produced on each page.)
I welcome any other tips that all of us could use.
Export Documents as ZIP in wdk applications
January 14th, 2010 by Praveena KillamsettyWe had a requirement in webtop where the client needed to export the selected documents as a zipped folder into the local client machine. It was interesting and time consuming since we did not want to write any Business Objects for this customization. I looked up a lot about this but couldn’t find a working solution. I am posting it here since it might be handy to others looking for something similar to this.
The user selects the documents needed to be exported and clicks on the menu option to export as zip.Then a jsp page pops up prompting the user to put in a name for the zipped folder.
After the user puts in a name and clicks Finish a page opens up with the zipped folder as link which the user needs to click to download it into the local client machine.
When clicked on the link the user is prompted for a location to save the zip folder and then the folder gets saved into the given location.
I followed the following steps to achive this:
Step 1: Put in all the selected objectIds in an ArrayList.
Step 2: Use the ContentTransferConfig object to get the ContentServer location and create a temp file in that location.
Step 3:Get the objects from the previously stored objectIds and and add them as zip entries to the temporary file created.
Step 4: Use the HTTPTransportManager to push the data and show up the links to download into the local machine.
Code:
Component comExport = getContainedComponent();
ArrayList comArray = new ArrayList();
ArrayList idArray = new ArrayList();
ArgumentList argList=new ArgumentList();
comArray = super.getContainedComponents();
Text zipControl=(Text) getContainedComponent().getControl(“zip_name”);
String zipName=zipControl.getValue();
for(int i=0; i<comArray.size(); i++)
{
comExport= (Component)comArray.get(i);
argList = comExport.getInitArgs();
idArray.add(argList.get(“objectId”));
}
ContentTransferConfig ctConfig = ContentTransferConfig.getConfig();
File tempFolderAppServer = ctConfig.getServerContentLocation();
File tempFile = File.createTempFile((new StringBuilder()).append(“mytempzip_”).toString(), “”, tempFolderAppServer);
FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
ZipOutputStream zos = new ZipOutputStream(fileOutputStream);
for (int i = 0; i < idArray.size(); i++)
{
IDfSysObject sysObject = (IDfSysObject) getDfSession().getObject(new DfId(idArray.get(i).toString()));
String strObjectFormat=sysObject.getFormat().getDOSExtension();
ZipEntry zipAdd = new ZipEntry(sysObject.getObjectName()+”.”+strObjectFormat);
zos.putNextEntry(zipAdd);
ByteArrayInputStream stream = sysObject.getContent();
byte[] buffer = new byte[10240];
while (true)
{
int len = stream.read(buffer, 0, buffer.length);
if (len <= 0)
break;
zos.write(buffer, 0, len);
}
stream.close();
}
HttpTransportManager manager = HttpTransportManager.getManager();
List ids = new ArrayList(1);
com.documentum.web.contentxfer.http.HttpTransportManager.Content content=null;
content = new com.documentum.web.contentxfer.http.HttpTransportManager.Content(tempFile, (new StringBuilder()).append(zipName).toString(), “zip”, tempFile.getParent(), 2);
idArray.add(manager.addOutgoing(content));
String contextPath = ((HttpServletRequest)getPageContext().getRequest()).getContextPath();
manager.setClientDownloadEvent(idArray, getTopForm(), contextPath);
zos.close();
fileOutputStream.close();
tempFile.deleteOnExit();
Register Custom Types for Documentum FAST Indexing
January 12th, 2010 by Zainab MantriBy default, Index Server indexes all dm_sysobject & it’s subtypes. All objects under that type and it’s subtypes will get full-text indexed, including dm_application, dm_job, job reports and all their attributes. If you want to limit your indexing to dm_document or only some of your custom types (only documents) you can follow the below mentioned steps.
For Documentum 6.5 & up it is a simple process. After you configure the Index Server & Index Agent do not start the Index Agent. Go to DA->Types->dm_sysobject->Properties and uncheck the check box for register for indexing. Go to your custom type and check the check box for register for indexing and start the Index Agent. It will index only those and it’s sub types documents.
Verify which types have been registered for indexing by using the following query:
- IDQL>select name from dm_type where r_object_id in (select distinct registered_id from dmi_registry where user_name like ‘%fulltext%’)
If you already have documents indexed you will need to delete the collection and index the documents again. Please look at the section below to follow the steps.
For Documentum 5.3 & up you have to go through the following steps.
There are 2 scenarios:
Documents are already indexed and you want to rebuild your index with only custom type documents.
If the documents are already indexed and there is a requirement to index only the custom types then we need to rebuild the indexes as follows:
- Unregister and register the super type that you want to index.
In iapi32 unregister the current events for the dm_fulltext_index_user for dm_sysobject.
idql32> select r_object_id from dm_type where name = ‘dm_sysobject’ – Get the object_id of the dm_sysobject
API> unregister,c,0319978f8000xxxxx,dm_save,dm_fulltext_index_user
API> unregister,c,0319978f8000xxxxx,dm_destroy,dm_fulltext_index_user
API> unregister,c,0319978f800xxxxx,dm_readonlysave,dm_fulltext_index_user
API> unregister,c,0319978f800xxxxx,dm_checkin,dm_fulltext_index_user
API> unregister,c,0319978f800xxxxx,dm_move_content,dm_fulltext_index_user
- Get a login ticket for dm_fulltext_index user
API> getlogin,c,dm_fulltext_index_user – Returns a dm_ticket with many characters as shown below. This is an example ticket only.
DM_TICKET=T0JKIE5VTEwgMAoxMwp2ZXJzaW9uIElOVCBTIDAKMwpmbGFncyBJTlQgUyAwCjAKc2VxdWVuY2VfbnVtIElOVCBTIDAKMzE3OQpjcmVhdGVfdGltZSBJTlQgUyAwCjEyMjU5OTIzNTgKZXhwaXJlX3RpbWUgSU5UIFMgMAoxMjI1OTkyNjU4CmRvbWFpbi
Copy it into a notepad and remove all the extra line breaks.
- Using the login ticket connect as dm_fulltext_index_user. Paste the login ticket as shown below. Note that USER below in blue is a superuser, typically dm_admin or similar.
API> connect,<USER>,dm_fulltext_index_user,DM_TICKET=T0JKIE5VTEwgMAoxMwp2ZXJzaW9uIElOVCBTIDAKMwpmbGFncyBJTl
… Result:
s1
- Register events for desired types.
idql32> select r_object_id from dm_type where name = ‘<custom type>’ – Get the object_id of the custom type which you want to register.
API> register,c, 030000fb80000xxx,dm_save,,F
SET> F
…
Returns: OK
API> register,c, 030000fb80000xxx,dm_destroy,,F
SET> F
…
Returns: OK
API> register,c, 030000fb80000xxx,dm_readonlysave,,F
SET> F
…
Returns: OK
API>register,c, 030000fb80000xxx,dm_checkin,,F
SET> F
…
Returns: OK
API>register,c, 030000fb80000xxx,dm_move_content,,F
SET> F
…
Returns: OK
- Stop Index Agent by either going to Windows Services or from the Index Agent Admin Page
- Click on the Collection Overview tab on the Index Server Admin Page. Find the name of the collection associated to the repository in question.
- Click on the trash icon “Delete Collection“.
- It will delete the index & the fixml information. Wait till it deletes all the indexes completely.
- Use the Index Agent Configuration Program delete the Index Agent associated with the repository.
- Check if the dm_ftindex_agent_config object is still in the repository. Delete it.
API> retrieve,c,dm_ftindex_agent_config
API> destroy,c,l
- Run the Index Agent Configuration Program to create a new Index Agent in the Normal Mode.
- Go to the Content Server and create a text file under C:\ called input.txt. Insert the following statement in it.
select r_object_id from <custom type> (all)
go
- Open a command prompt. Type C:\>idql32 <repositoryname> -u<username> -p<password> -rinput.txt > ids.txt. It will create a file under C:\ with all the object id’s of all the documents of your custom types & sub types including old versions.
- Remove the headers and footers from the ids.txt keeping only the object ids.
- Copy this file to \\Documentum\jboss4.2.0\server\DctmServer_IndexAgent1\deploy\IndexAgent1.war\WEB-INF\classes.
- Start the Index Agent. It will pick this file and after it has finished indexing you will see the file has a .done extension.
Fresh Index Server Install and want to index only custom types.
In this you need to unregister and register the custom type before configuring your index agent.
Mandatory attributes in Alfresco 3.1
January 7th, 2010 by Zainab MantriWe ran into some issues with mandatory attributes in Alfresco 3.1 while working on a project for a client. When designing the content model in Alfresco, you can set a property to be mandatory by using this tag <mandatory enforced=”true”>true</mandatory>. The enforced attribute means enforced by the repository, while the value between the tags merely means enforced by the web client. There is an inherent problem with setting enforced=”true”, which is that when creating new content in Alfresco, you do not get a chance to fill out any attributes except what you see there. This means that if you have a custom attribute that is set to mandatory and you go through the wizard, you will get an integrity error from the repository. What is happening is that Alfresco is attempting to create content, but since the mandatory attribute was never filled, there is a problem. The only real way to fix this is to customise the content create/import screens to contain those mandatory attributes. Of course, if we are willing to relax the requirements, there are a couple alternatives. One is to set a default value for the attribute, which may suffice for some cases. The other is to forgo enforcing in the repository and do it only in the web client. This will allow the content to be created, but properties cannot be updated unless all the mandatory attributes that show up in the edit details screen are filled. After creating content, there is an option to edit the properties right away. With repository enforcement, we would never reach this screen to fill out the mandatory attributes. The problem is that the user can still press cancel and be left with the document with unfilled properties, but at least there are no errors and any attempts to update the properties would at least require filling out the mandatory values. This is what we went with for that project.
There are a few more quirks that need to be sorted out. When dealing with mandatory single select drop-downs (from list constraints), one would notice that even a blank value is considered filled. Essentially what it implies is that if you are using a list constraint, mandatory loses its meaning. Looking at the code it seems that Alfresco assumes these drop-downs are always filled and so forgo any mandatory checks in the User Interface. In our case, the client wanted a blank entry selected by default so that users can consciously select from the list without having a default entry selected for them, which is a perfectly understandable requirement. The way we solved this problem is by overriding the default TextFieldGenerator so that it will add checks when a dropdown is rendered. We would just make it add the same checks it would have added if it were one of the other UI widgets, with small changes to account for it being a dropdown. To make the blank entry, just add an empty value at the top of your list constraint.
The code is provided below and hopefully should be self explanatory. Basically, we override the set up of mandatory validations and check if the component is a dropdown so that we can execute our code. Then we perform the same operations the grandfather class would do, and then add an event listener when the dropdown box is change. I hope that you’re able to find this short article useful in some way.
<managed-bean>
<description>
Bean that generates a text field component
</description>
<managed-bean-name>TextFieldGenerator</managed-bean-name>
<managed-bean-class>com.company.CustomTextFieldGenerator</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
public class CustomTextFieldGenerator extends TextFieldGenerator {
@SuppressWarnings("unchecked")
protected void setupMandatoryValidation(FacesContext context,
UIPropertySheet propertySheet, PropertySheetItem item,
UIComponent component, boolean realTimeChecking,
String idSuffix)
{
if (component instanceof UISelectOne) {
/* What follows is taken from the grandfather class */
List<String> params = new ArrayList<String>(3);
// add the value parameter
StringBuilder value = new StringBuilder("(tempElement = document.getElementById('");
value.append(component.getClientId(context));
if (idSuffix != null)
{
value.append(idSuffix);
}
value.append("'),");
value.append("tempElement.options[tempElement.selectedIndex]");
value.append(")");
params.add(value.toString());
// add the validation failed message to show (use the value of the
// label component of the given item)
String msg = Application.getMessage(context, "validation_mandatory");
addStringConstraintParam(params,
MessageFormat.format(msg, new Object[] {item.getResolvedDisplayLabel()}));
// add the validation case to the property sheet
propertySheet.addClientValidation(new ClientValidation("validateMandatory",
params, true));
if (!component.getAttributes().containsKey("onchange")) {
component.getAttributes().put("onchange", "processButtonState();");
} else {
}
} else {
super.setupMandatoryValidation(context, propertySheet, item, component, realTimeChecking, idSuffix);
}
}
}
<description>
Bean that generates a text field component
</description>
<managed-bean-name>TextFieldGenerator</managed-bean-name>
<managed-bean-class>com.ifds.web.CustomTextFieldGenerator</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<!–
<managed-property>
<property-name>size</property-name>
<value>35</value>
</managed-property>
–>
</managed-bean>
John Mancini Delivers 8 Reasons
October 8th, 2009 by Reva Customer CareI recently had an opportunity to meet AIIM President John Mancini at the recent AIIM Conference in Western Canada where he delivered the keynote address and summarized the content in his latest eBook “8 reasons you need a strategy for managing information — before it’s too late”.
The presentation, along with the released eBook deliverers thought-provoking comments and understanding on how to get started in managing your organizations information. Looking at the TOC, you would be delighted to know that the content is just as interesting and edgy as the headings:
8 reasons you need a strategy for managing information — before it’s too late
1. A tidal wave of information
2. Ubiquitous computing
3. Social everything
4. Collaboration without governance is a disaster
5. The era of simplicity
6. The Tree-Hugger’s Time Has Come
7. You can no longer do this manually
8. Mismanagement risks are rising
I hope everyone enjoys this first of series eBook by John and his team as much as I did.







