1 2 Previous Next 23 Replies Latest reply: Jan 17, 2008 12:28 AM by 617460 Go to original post RSS
      • 15. Re: Updating a document with category metadata using updateDocument(): erro
        mshannon
        When doing an update of a document's category instance, you need to supply the id of the category INSTANCE, and NOT the id of the category class OBJECT.

        What you are doing in your code is as follows:

        Get me the category configuration for my folder.
        Determine the required category class objects of my folder.
        Recurse through the required category class objects and save the very last occurrence in my variable tmpCatClass.
        Create a new NamedValue[] definition that will be supplied to updateDocument

        The NamedValue[] definition correctly references the replacement values for the category (in categoryInstanceAttributes)
        The NamedValue[] definition INCORRECTLY references the id of the category class object instead of the id of the actual category instance definition that you want to update.

        Consider the following :
        I have a category object called "Comments" that has a single attribute "comment" of type String.
        It is possible that I have multiple instances of this category object applied to a single document. User bob, could applied an instance of the Comments category to my document. As could user sancho.

        When I want to update the values of a particular instance of the "Comments" category applied to my document (for example - Sancho gave me bad feedback), I need to supply the id of the category instance (the comment instance left by Sancho), and NOT the id of the actual 'Comments' category object class (whoms job is purely to define the structure of the metadata that the object captures.

        This is why you are getting the error.

        Check out my earlier post that has the how do i XXX options - and look at Options 1 and more importantly Option 2 along with the output and id's that I'm utilizing.

        cheers

        matt.
        • 16. Re: Updating a document with category metadata using updateDocument(): erro
          478333
          Sure enough, UPDATE_CATEGORY_ID and CATEGORY_CLASS_ID show up when I use the latest jar. But I still cannot update metadata, ala CJ. Do I need to patch the server too? Not happy about having to patch the production system all the time to get basic functionality.
          • 17. Re: Updating a document with category metadata using updateDocument(): erro
            mshannon
            Options.UPDATE_CATEGORY_ID and Options.CATEGORY_CLASS_ID have been around since release 10.1.2.0.0.

            They were not present in 10.1.1.

            If you are in fact running 10.1.1, I strongly suggest you upgrade to 10.1.2.0 at a minimum.. and better still 10.1.2.3 ;)

            If you are already running 10.1.2, then you must be using an old version of the content-ws-client.jar file.

            cheers
            Matt.
            • 18. Re: Updating a document with category metadata using updateDocument(): erro
              478333
              Gotcha. Already upgraded my jar. However, the server is not so easy to upgrade. We can't just throw patches on there all willy-nilly. The server is currently at 10.1.2.2. Is this adequate for the time being? Given the aforementioned information, I'd guess 'yes'.
              The example code given earlier is very helpful, but it lacks in a detail or two. For example, it does not show how to map attribute display names to internal names. I cooked up the following AttributeRequest[], which grabs all required data. I have not yet finished the code that reads all this data into a useful format - coming soon.


              public Item getItemWithCategoryInfo(Item documentItem) throws WebserviceClientException {
              /* This is a function. Do not modify the place passed in as the argument. Make a copy. */
              Item workingItem = documentItem;
              /* Build the request for all category information on the document. */
              AttributeRequest[] categoryClassDisplayNameAttributes = new AttributeRequest[] {
              new AttributeRequest(Attributes.DISPLAY_NAME, null)
              };
              AttributeRequest[] categoryClassObjectAttributes = new AttributeRequest[] {
              new AttributeRequest(Attributes.CATEGORY_CLASS_OBJECT, categoryClassDisplayNameAttributes)
              };
              AttributeRequest[] categoryClassAttributes = new AttributeRequest[] {
              new AttributeRequest(Attributes.CLASS_NAME, null),
              new AttributeRequest(Attributes.DISPLAY_NAME, null),
              new AttributeRequest(Attributes.METADATA_ATTRIBUTES, new AttributeRequest[] {
              new AttributeRequest(Attributes.ATTRIBUTE_NAME, null),
              new AttributeRequest(Attributes.DISPLAY_NAME, null),
              new AttributeRequest(Attributes.ATTRIBUTE_TYPE, null),
              new AttributeRequest(Attributes.ATTRIBUTE_DEFAULT, null),
              new AttributeRequest(Attributes.ATTRIBUTE_ENUMERATION, null),
              new AttributeRequest(Attributes.ATTRIBUTE_REQUIRED, null),
              new AttributeRequest(Attributes.ATTRIBUTE_SETTABLE, null),
              new AttributeRequest(Attributes.ATTRIBUTE_UPDATEABLE, null),
              new AttributeRequest(Attributes.ATTRIBUTE_HIDDEN, null),
              new AttributeRequest(Attributes.ATTRIBUTE_PROMPTED, null),
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDEABLE, null),
              })
              };
              AttributeRequest[] overrideAttributes = new AttributeRequest[] {
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_ATTRIBUTE, null),
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_CATEGORY_CLASS, null),
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_DEFAULT, null),
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_PROMPT, null),
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_REQUIRED, null),
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_SETTABLE, null),
              };
              AttributeRequest[] requestedAttributes = new AttributeRequest[] {
              new AttributeRequest(Attributes.CATEGORIES, categoryClassObjectAttributes),
              new AttributeRequest(Attributes.CATEGORY_CONFIGURATION, new AttributeRequest[] {
              new AttributeRequest(Attributes.CONFIGURATION_ENABLED, null),
              new AttributeRequest(Attributes.CONFIGURATION_FINAL, null),
              new AttributeRequest(Attributes.REQUIRED_CATEGORIES, categoryClassAttributes),
              new AttributeRequest(Attributes.ALLOW_ALL_CATEGORIES, null),
              new AttributeRequest(Attributes.ALLOWED_CATEGORIES, categoryClassAttributes),
              new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDES, overrideAttributes)
              })
              };
              try {
              workingItem = getCommonManager().getItem(workingItem.getId(), requestedAttributes);
              } catch(RemoteException e) {
              throw new WebserviceClientException(e.getMessage().replaceAll("\n", " "), e);
              }
              return workingItem;
              }
              • 19. Re: Updating a document with category metadata using updateDocument(): erro
                mshannon
                I'm a little suprised that none of our 10.1.2.2 patches bundled an updated content-ws-client.jar. The dev kits do however bundle the jar.

                You can also extract the content-ws-client.jar from patch 4743860.

                ContentServices_10.1.2.1.0_Patch_p4743860_101200_LINUX.zip

                it is hidden in the content_searchlet.jar found under 4743860\files\content\lib.

                It is much easier though to just download the 10.1.2 dev kit and grab the content-ws-client.jar from it
                http://www.oracle.com/technology/products/cs/developer/contentservicesdev/sourcepackages/CSWebServices_1012_RTM.zip

                The content-ws-client.jar from above should work with content services instances up to and including 10.1.2.2.x.

                Do not use this jar against 10.1.2.3 content services - get the updated jar which includes things like AuditManager.

                Anyway, here is some category utility code that you can adapt to lookup category objects by display name/internal name, and also to lookup attribute internal/display names. - it is from the FdkUtils class in the PM accelerator kit

                Matt.
                  /**
                   * Look up the root level CategoryObject with CLASS_NAME matching supplied
                   * className parameter, or, if a null className was specified, the
                   * CategoryObject with DISPLAY_NAME matching supplied displayName parameter.
                   */
                  public static Item getRootCategoryObject(
                    FdkSession session,
                    String className,
                    String displayName,
                    AttributeRequest[] requestedAttributes
                  )
                    throws Exception
                  {

                    if (className == null && displayName == null)
                      return null;

                    session.verifyConnected();

                    Item category = null;
                    AttributeRequest[] requestedAttributes2 = null;
                    Map returnedAttrs = null;

                    // looking for root category objects
                    requestedAttributes2 = new AttributeRequest[]
                    {
                      new AttributeRequest(Attributes.ROOT_CATEGORY_CLASSES,
                        new AttributeRequest[]
                        {
                          new AttributeRequest(Attributes.DISPLAY_NAME,null),
                          new AttributeRequest(Attributes.CLASS_NAME,null),
                        }
                      )
                    };
                   
                    CommonManager cm = Managers.getCommonManager(session);
                    Item domain = cm.getItem(session.getDomainId(),requestedAttributes2);

                    Item[] categories =
                      (Item[]) FdkUtils.getAttribute(domain,Attributes.ROOT_CATEGORY_CLASSES);

                    if (categories != null)
                    {
                      for (int i=0; i < categories.length; i++)
                      {
                        // convert returned requested attribute NamedValue[] to a Map
                        returnedAttrs = FdkUtils.getAttributesMap(categories);
                String returnedClassName =
                (String)returnedAttrs.get(Attributes.CLASS_NAME);
                String returnedDisplayName =
                (String)returnedAttrs.get(Attributes.DISPLAY_NAME);

                if (className == null)
                {
                if (displayName.equals(returnedDisplayName))
                {
                category = categories[i];
                break;
                }
                }
                else
                {
                if (className.equals(returnedClassName))
                {
                category = categories[i];
                break;
                }
                }
                }
                }
                if ((category != null) && (requestedAttributes != null))
                category = cm.getItem(category.getId(),
                (AttributeRequest[]) FdkUtils.combineArrays(
                new AttributeRequest[]
                {
                new AttributeRequest(Attributes.DISPLAY_NAME,null),
                new AttributeRequest(Attributes.CLASS_NAME,null),
                },requestedAttributes)
                );

                return category;
                }

                /**
                * Look up the CategoryObject with CLASS_NAME matching supplied
                * className parameter, or, if a null className was specified, the first
                * CategoryObject with DISPLAY_NAME matching supplied displayName parameter.
                */
                public static Item getCategoryObject(
                FdkSession session,
                String className,
                String displayName,
                AttributeRequest[] requestedAttributes
                )
                throws Exception
                {

                if (className == null && displayName == null)
                return null;

                session.verifyConnected();

                Item category = null;
                AttributeRequest[] requestedAttributes2 = null;
                Map returnedAttrs = null;

                // looking for root category objects
                requestedAttributes2 = new AttributeRequest[]
                {
                new AttributeRequest(Attributes.CATEGORY_CLASSES,
                new AttributeRequest[]
                {
                new AttributeRequest(Attributes.DISPLAY_NAME,null),
                new AttributeRequest(Attributes.CLASS_NAME,null),
                }
                )
                };

                CommonManager cm = Managers.getCommonManager(session);
                Item domain = cm.getItem(session.getDomainId(),requestedAttributes2);

                Item[] categories =
                (Item[]) FdkUtils.getAttribute(domain,Attributes.CATEGORY_CLASSES);

                if (categories != null)
                {
                for (int i=0; i < categories.length; i++)
                {
                // convert returned requested attribute NamedValue[] to a Map
                returnedAttrs = FdkUtils.getAttributesMap(categories[i]);
                String returnedClassName =
                (String)returnedAttrs.get(Attributes.CLASS_NAME);
                String returnedDisplayName =
                (String)returnedAttrs.get(Attributes.DISPLAY_NAME);

                if (className == null)
                {
                if (displayName.equals(returnedDisplayName))
                {
                category = categories[i];
                break;
                }
                }
                else
                {
                if (className.equals(returnedClassName))
                {
                category = categories[i];
                break;
                }
                }
                }
                }
                if ((category != null) && (requestedAttributes != null))
                category = cm.getItem(category.getId(),
                (AttributeRequest[]) FdkUtils.combineArrays(
                new AttributeRequest[]
                {
                new AttributeRequest(Attributes.DISPLAY_NAME,null),
                new AttributeRequest(Attributes.CLASS_NAME,null),
                },requestedAttributes)
                );

                return category;
                }

                /**
                * For the given document item, return all category instances applied to it
                * that have a CategoryObject type with CLASS_NAME matching supplied
                * className parameter, or, if a null className was specified, have a
                * CategoryObject type with DISPLAY_NAME matching supplied displayName
                * parameter.
                */
                public static Item[] getMatchingCategoryInstances(
                FdkSession session,
                Item document,
                String className,
                String displayName,
                AttributeRequest[] requestedAttributes
                )
                throws Exception
                {
                if ((document == null) || (className == null && displayName == null))
                return null;

                session.verifyConnected();

                Item[] returnedCategoryInstances = null;
                AttributeRequest[] requestedAttributes2 = null;
                Map returnedAttrs = null;

                requestedAttributes2 = new AttributeRequest[]
                {
                // category instanes
                new AttributeRequest(Attributes.CATEGORIES,
                new AttributeRequest[]
                {  // classobject of instance
                new AttributeRequest(Attributes.CATEGORY_CLASS_OBJECT,
                new AttributeRequest[]
                { // classname and displayname of classobject
                new AttributeRequest(Attributes.DISPLAY_NAME,null),
                new AttributeRequest(Attributes.CLASS_NAME,null),
                }
                )
                }
                )
                };

                CommonManager cm = Managers.getCommonManager(session);
                Item doc = cm.getItem(document.getId(),requestedAttributes2);

                Item[] categoryInstances =
                (Item[]) FdkUtils.getAttribute(doc,Attributes.CATEGORIES);

                int length = (categoryInstances==null?0:categoryInstances.length);
                Vector v = new Vector();
                for (int i=0; i < length; i++)
                {
                Item category = (Item) FdkUtils.
                getAttribute(categoryInstances[i],Attributes.CATEGORY_CLASS_OBJECT);

                returnedAttrs = FdkUtils.getAttributesMap(category);

                String returnedClassName =
                (String)returnedAttrs.get(Attributes.CLASS_NAME);
                String returnedDisplayName =
                (String)returnedAttrs.get(Attributes.DISPLAY_NAME);

                if (className == null)
                {
                if (displayName.equals(returnedDisplayName))
                {
                v.add(categoryInstances[i]);
                }
                }
                else
                {
                if (className.equals(returnedClassName))
                {
                v.add(categoryInstances[i]);
                }
                }
                }

                if (v.size() > 0)
                {
                if (requestedAttributes == null)
                {
                returnedCategoryInstances = new Item[v.size()];
                v.toArray(returnedCategoryInstances);
                }
                else
                {
                long[] ids = new long[v.size()];
                for (int i=0;i<v.size();i++)
                ids[i] = ((Item) v.get(i)).getId();

                returnedCategoryInstances = cm.getItems(ids,
                (AttributeRequest[]) FdkUtils.combineArrays(
                new AttributeRequest[]
                {
                new AttributeRequest(Attributes.CATEGORY_CLASS_OBJECT,null)
                },requestedAttributes)
                );
                }
                }
                return returnedCategoryInstances;
                }

                public static Map getAttributeNamesFromDisplayNames(
                FdkSession session,
                long categoryObject,
                String[] attributeDisplayNames
                )
                throws Exception
                {
                int length= (attributeDisplayNames==null) ? 0 :attributeDisplayNames.length;
                if (length==0) return null;

                session.verifyConnected();

                HashMap hm = new HashMap(length);
                for (int i=0; i<length; i++) hm.put(attributeDisplayNames[i],null);

                Map map = new HashMap();
                AttributeRequest[] requestedAttributes = null;

                requestedAttributes = new AttributeRequest[]
                {
                new AttributeRequest(Attributes.METADATA_ATTRIBUTES,
                new AttributeRequest[]
                {
                new AttributeRequest(Attributes.ATTRIBUTE_NAME,null),
                new AttributeRequest(Attributes.DISPLAY_NAME,null)
                }
                )
                };

                CommonManager cm = Managers.getCommonManager(session);
                Item cat = cm.getItem(categoryObject,requestedAttributes);

                Item[] attributes =
                (Item[]) FdkUtils.getAttribute(cat,Attributes.METADATA_ATTRIBUTES);

                int len = (attributes == null) ? 0 : attributes.length;

                for (int i = 0;(i<len && !hm.isEmpty()); i++)
                {
                Item attribute = attributes[i];
                Map m = FdkUtils.getAttributesMap(attribute);
                String displayName =
                (String) m.get(Attributes.DISPLAY_NAME);
                // Obtain the display name of the attribute.
                if ((displayName != null) && hm.containsKey(displayName))
                {
                map.put(displayName,(String) m.get(Attributes.ATTRIBUTE_NAME));
                hm.remove(displayName);
                }
                }
                return map;
                }

                public static String getAttributeNameFromDisplayName(
                FdkSession session,
                long categoryObject,
                String attributeDisplayName
                )
                throws Exception
                {
                String attributeName = null;

                Map m = getAttributeNamesFromDisplayNames(
                session,categoryObject,new String[] {attributeDisplayName});

                if ((m != null) && (m.containsKey(attributeDisplayName)))
                attributeName = (String) m.get(attributeDisplayName);

                return attributeName;
                }


                public static Map getAttributeDisplayNamesFromNames(
                FdkSession session,
                long categoryObject,
                String[] attributeNames
                )
                throws Exception
                {
                int length= (attributeNames==null) ? 0 :attributeNames.length;
                if (length==0) return null;

                session.verifyConnected();

                HashMap hm = new HashMap(length);
                for (int i=0; i<length; i++) hm.put(attributeNames[i],null);

                Map map = new HashMap();
                AttributeRequest[] requestedAttributes = null;

                requestedAttributes = new AttributeRequest[]
                {
                new AttributeRequest(Attributes.METADATA_ATTRIBUTES,
                new AttributeRequest[]
                {
                new AttributeRequest(Attributes.ATTRIBUTE_NAME,null),
                new AttributeRequest(Attributes.DISPLAY_NAME,null)
                }
                )
                };

                CommonManager cm = Managers.getCommonManager(session);
                Item cat = cm.getItem(categoryObject,requestedAttributes);

                Item[] attributes =
                (Item[]) FdkUtils.getAttribute(cat,Attributes.METADATA_ATTRIBUTES);

                int len = (attributes == null) ? 0 : attributes.length;

                for (int i = 0;(i<len && !hm.isEmpty()); i++)
                {
                Item attribute = attributes[i];
                Map m = FdkUtils.getAttributesMap(attribute);
                String name =
                (String) m.get(Attributes.ATTRIBUTE_NAME);
                // Obtain the internal name of the attribute.
                if ((name != null) && hm.containsKey(name))
                {
                map.put(name,(String) m.get(Attributes.DISPLAY_NAME));
                hm.remove(name);
                }
                }
                return map;
                }

                public static String getAttributeDisplayNameFromName(
                FdkSession session,
                long categoryObject,
                String attributeName
                )
                throws Exception
                {
                String attributeDisplayName = null;

                Map m = getAttributeDisplayNamesFromNames(
                session,categoryObject,new String[] {attributeName});

                if ((m != null) && (m.containsKey(attributeName)))
                attributeDisplayName = (String) m.get(attributeName);

                return attributeDisplayName;
                }

                • 20. Re: Updating a document with category metadata using updateDocument(): erro
                  478333
                  I got it working. However, I could not deal with the mess of using the oracle.ifs.fdk API directly in my business logic, so I wrote an abstraction layer. Now my code is too big to post. If anyone wants to see my solution, I would be happy to provide it on an individual basis. Or, is there a way to attach a file to these posts?

                  Anyway, I used Options.UPDATE_CATEGORY_ID. For the category ID, I start with the following AttributeRequest. Then I use the ID found under Attributes.CATEGORIES. Each CATEGORY therein has an ID, and that is the ID that needs to be supplied to Options.UPDATE_CATEGORY_ID.


                  public Item getItemWithCategoryInfo(Item documentItem) throws WebserviceClientException {
                  /* This is a function. Do not modify the place passed in as the argument. Make a copy. */
                  Item workingItem = documentItem;
                  /* Build the request for all category information on the document. */
                  AttributeRequest[] categoryClassDisplayNameAttributes = new AttributeRequest[] {
                  new AttributeRequest(Attributes.DISPLAY_NAME, null)
                  };
                  AttributeRequest[] categoryClassObjectAttributes = new AttributeRequest[] {
                  new AttributeRequest(Attributes.CATEGORY_CLASS_OBJECT, categoryClassDisplayNameAttributes)
                  };
                  AttributeRequest[] categoryClassAttributes = new AttributeRequest[] {
                  new AttributeRequest(Attributes.CLASS_NAME, null),
                  new AttributeRequest(Attributes.DISPLAY_NAME, null),
                  new AttributeRequest(Attributes.METADATA_ATTRIBUTES, new AttributeRequest[] {
                  new AttributeRequest(Attributes.ATTRIBUTE_NAME, null),
                  new AttributeRequest(Attributes.DISPLAY_NAME, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_TYPE, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_DEFAULT, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_ENUMERATION, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_REQUIRED, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_SETTABLE, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_UPDATEABLE, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_HIDDEN, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_PROMPTED, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDEABLE, null),
                  })
                  };
                  AttributeRequest[] overrideAttributes = new AttributeRequest[] {
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_ATTRIBUTE, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_CATEGORY_CLASS, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_DEFAULT, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_PROMPT, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_REQUIRED, null),
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_SETTABLE, null),
                  };
                  AttributeRequest[] requestedAttributes = new AttributeRequest[] {
                  new AttributeRequest(Attributes.CATEGORIES, categoryClassObjectAttributes),
                  new AttributeRequest(Attributes.CATEGORY_CONFIGURATION, new AttributeRequest[] {
                  new AttributeRequest(Attributes.CONFIGURATION_ENABLED, null),
                  new AttributeRequest(Attributes.CONFIGURATION_FINAL, null),
                  new AttributeRequest(Attributes.REQUIRED_CATEGORIES, categoryClassAttributes),
                  new AttributeRequest(Attributes.ALLOW_ALL_CATEGORIES, null),
                  new AttributeRequest(Attributes.ALLOWED_CATEGORIES, categoryClassAttributes),
                  new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDES, overrideAttributes)
                  })
                  };
                  try {
                  workingItem = getCommonManager().getItem(workingItem.getId(), requestedAttributes);
                  } catch(RemoteException e) {
                  throw new WebserviceClientException(e.getMessage().replaceAll("\n", " "), e);
                  }
                  return workingItem;
                  }
                  • 21. Re: Updating a document with category metadata using updateDocument(): erro
                    451333
                    Hi All,

                    I am updating the category using Options.UPDATE_CATEGORY_ID giving the category instance ID as its input.

                    new NamedValue(Options.UPDATE_CATEGORY_ID,new Long(category.getId())),

                    But, Now, i am getting 'ItemNotCheckout' Error

                    Is it manadatory to check out file to update document? I don't want to check out the file to update the category as it will create another version . Please let me know how to proceed further.

                    My Requirement is I have an Document which is aready there ion folder with category assigned to it. When i upload document with same name, it should create a version ( doing manual versioning to update version values) and also modyfy the existing category intance values.

                    Thanks
                    Veeraswami
                    • 22. Re: Updating a document with category metadata using updateDocument(): erro
                      mshannon
                      Hi Veeraswami,

                      With a manual versioning policy enabled, any change to content and/or metadata requires the document to be checked-out. Thus metadata changes trigger new versions, as do content.

                      If you move to Content DB, you will find that you can perform an update of metadata and content in a single operation (just as you can currently with document creation) - thus only a single version results

                      In Content DB, you can call filemanager.updateDocument supplying both a content stream, as well as a category definition.

                      Content DB should be available week starting Aug 7.

                      cheers.

                      matt.
                      • 23. Re: Updating a document with category metadata using updateDocument(): erro
                        617460
                        Hi Matt,

                        I have a category with 5 attributes.Each Attribute is of type Enum String.How should i set the available enumerated value to the file/folder.
                        Could you help me with any samples?
                        1 2 Previous Next