WebCenter Content Class Questions and Responses

How to change the skin layout to a different one for existing users who have logged in?

 Use case: Essentially: “Change everyone to our new layout, and then they can switch back if they want to.”

A way to force all users to a specific layout? LmDefaultLayout   new users only.

http://docs.oracle.com/middleware/12211/wcc/CSSRG/GUID-5443AA3F-DDE9-4E91-BB41-93651ABE7FFF.htm#GUID-B027C977-6399-4D5A-A8E9-A39594B405C5 SAVE_USER_TOPICS is the service. There is local data in <ucm dir>/data/users/profiles/… in the pne_portal.hda file, you’ll find 2 local data values for the layout and skin. With the service you can change these (for the calling user). Use RIDC or similar to change for all users (i.e. repeat for all users). Note that RIDC is assumed secure, so you only need to add the user ID, not the password.

Also, script hackers might go and write a script that walks the directory and changes everyone’s layout and skin.

If you use something like RIDC, you just need their user name. RIDC is trusted (that is every app that uses ridc and connects to WCC is trusted – that’s a big hole, which is why you filter by IP address in the config – so a parameter in any RIDC call is the user ID for whom you are executing this call. You can pick any valid user, and their security permissions are applied to the call.

I call the service via the URL for example it’s for the logged in user only. so RIDC or brute force are easier.

Services: GET_DOC_PAGE vs GET_SECURE_PAGE

This service is usually called from the browser interface and is restricted to users with Write permission to at least one group. The most likely error is when the referenced HTM page is not found.This service is identical to GET_DOC_PAGE except this service requires Write privileges to at least one security group, whereas GET_DOC_PAGE only requires Read access. GET_DOC_PAGE loads the UI, typically in the browser, and only in the Native UI.

GET_SECURE_PAGE: You might use it for some of the content management pages (get workflow, or get work in progress), where you want to distinguish between users who only have read permission on the system, so probably shouldn’t see that data, and users who are contributors (i.e. write permission).  It’s a timing thing. If you only have write, do you show them a checkin page, and then throw an error when they can’t check in, or just not let them go there.

Release Date and Time

The release date is a metadata field that is set by the user on checkin. By default, it’s the current date/time of when the checkin form was rendered… not the actual time of submission of that checkin form. And that date is completely flexible, it can be in the future to hold content release until that time. The Indexer date is set internally, when the indexing process is complete. I expect the gap is the time between when the checkin form was rendered on the browser, and the completion of the indexing process. Note that if you are checking in a whack of stuff, there can be a delay (aka Work in Progress), so the indexing is delayed.

and this is what repo mgr is showing – the word” release” here means same as checkin form. It’s the old column label vs database table column name thingy. The repo mgr includes “check-in date” and release date. That’s the time the check in form was submitted. And then release date is what you specified on the check in form… you could release in an hour from now..then they would be different.

Clever people know that indexing is the last step before release, and updating the index means that people can now search for it, etc., so that’s the actual release date. There’s always a gap between dInDate (labelled Release Date) and the time it was released… just processing time. So a large gap a customer is seeing is because of the batch checkin. Items are queuing for indexing, and being handled on a first-come first-served basis.

The date fields are defined this way.

  • The dInDate field shows the date and time on the check-in form.  (The Release Date field on the check-in form uses this value).
  • The dCreateDate field is the date and time the document is actually checked into the system.
  • The dReleaseDate field shows the date and time the document makes it to the Released state (after being converted, indexed, out of workflow, etc.).  This gets modified during a metadata update.
  • The dOutDate field shows the date the document will expire (The Expiration Date on the check-in form uses this value).
  • The counters logic was rewritten in 11g and the RevClasses table was part of the solution.  Addition information about dDocCreatedDate can be found in the documentation:(Section 5.1.13 Configuring the dDocCreatedDate Attribute)
Create Custom Metadata fields as part of a Custom Component?

Yes. Many components (like the official product ones – think framework folders or Folders_g) create metadata fields when they are installed. There’s a hook that fires when WCC boots, so this fires when you re-boot after you install the component. Trapped, and if metadata field does not exist, then creates.

but for custom comps – then when one disables the comp – what happens to the md fields?

left there in the repository. deletion is a manual process. And adding metadata is expensive (adding columns to tables, index rebuilding (even fast rebuilding), etc.)

Diacritical

3.2.8.2 Base-Letter Conversion for Characters with Diacritical MarksSome languages contain characters with diacritical marks such as tildes, umlauts, and accents. When your indexing operation converts words containing diacritical marks to their base letter form, queries need not contain diacritical marks to score matches. For example in Spanish with a base-letter index, a query of energía matches energía and energia in the index.However, with base-letter indexing disabled, a query of energía matches only energía.You can enable and disable base-letter indexing for your language with the base_letter attribute of the BASIC_LEXERpreference type.

http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch5lingsort.htm

Sort order can ignore or consider diacritics.

AXF & BPM
Oracle’s Application Extension Framework (AXF) is a command-driven, web services integration between a business application such as E-Business Suite and a content management application such as I/PM. The open Java-based architecture of AXF allows integrators to configure and modify multiple business process solutions separate from the systems themselves, and to upgrade systems without affecting implemented AXF solutions.
And where they say I/PM they mean Imaging (I/PM is the old name).
Capture vs. Imaging
capture is just document capture. either through a scanner, reading a directory contents, or receiving email. One you have to documents, you create a batch and add metadata (maybe OCR, and convert to pdf, etc.). and then upload.
upload where though? upload to WCC and you’ve got new content.
You could upload to imaging.
Imaging is a product that takes input content, with metadata, and performs transactions agains back end systems using business processes.
The canonical example is A/P invoice processing.
Capture the image of the invoice, add metadata, G/L coding, approvals, etc. and then check the content into WCC and also verify data with Oracle EBS, and then create A/P Voucher automatically (i.e. no human intervention) and cross reference document in WCC as an attachment.
Workflows: Having edit/reject go to different user, than most recent editor/submitter.

the use case is A submits, B edits and rejects – and I want the comments in the doc  edited by B to go back to A.  Ex: MS Office – B adds notes/comments using MS Office review features and checks back in. He wants it “rejected’ so it goes back to A so A can see the newly added comments.

However, when B rejects it stays with B.

Discussion:

If you edit the document, you get to be the author, instead of the original author. In fact you could replace the content with an entirely different document (if you selected edit and replace).
In any event, the rejection takes to back to the contribution steop, as shown in the workflow info, but since you are not the creator, it’s assigned to you. It’s also in the edit status, so you have to edit and approve, and then it goes back to the previous w/f/ step (assigned you you), where you can review again.
it’s simple-mindedly picking the author from the document. So can you change the author on the document when you check it in? You might need admin role to do that.
 
if you have an admin role, you can change the author on checkin. Now, you probably don’t want to give everyone admin role, so a customization will probably be required.
 
The rejection is going to the internal “Contribution” step. That automatically picks the document author as the person responsible. 
 
Another solution to this problem is to have the workflow start with a review/approve step by the original author (use the wf token – I believe they persist unchanged from the start of the workflow). Then, if the subsequent reviewer edits and then rejects the document, it should go to the original author.
Use the token (which is set when workflow starts) to records the original author. Then have an initial step that goes to this same person for review and approval, then the step where the person edits and rejects.
So the workflow really has a redundant step, or maybe not. What if user A wants to edit the content multiple times before actually submitting to workflow.
So A edits the released document. The revision goes into workflow…
In the first workflow step, use the token to assign the user (3 choices, token, alias, and user).
set a token to the wf user metadata value. Then use that token later in workflow step assignment.
do the same with dDocAuthor
the token values are set at the start of the workflow and persist throughout the workflow.
When B edits the document, it is already in workflow, so none of the token setting, is done.
 
Solution
 in step 1  use <$wfAddUser(dDocAuthor, “user”)$>
to set A as the original submitter to be the “dDocAuthor” – this gets set within a token, so that never changes regardless of who edits and submits w/i the workflow later on. then, in step 2 When B checks out edits and submits, while B is listed as dDocAuthor in the *metadata* for the file, it is the dDocAuthor that is set in the token  (“A”) that is used when B rejects what he edited and checked in?
and if later B needs to be the “dDocAuthor” to C then use the same function in that step on exit and so on. to reset the dDocAuthor
So regardless of who edits the document (and is recorded as author), it returns to the original author.
 
Customization: Change Title based on Filename on CheckIn New Page:

look for compute_std_file_includes and then std_file_entry

In the Native UI, the else clause is what’s used… creates html like this:

<input type=”file” name=”primaryFile” id=”primaryFile-510″ size=35                maxlength=250 value=””>
If you wanted to customize, you’d add an onchange javascript event here. And then modify/add a new component resource to add your javascript function to change the title.
onchange=”setDocTitle(‘<$fieldId$>’)”
and then define a javascript function:
function setDocTitle(fileId) {
filepath = document.getElementById(fileID).value;
So, you’ve got the file path… now do some regular expression work to find the actual file name…
Then, you’ve got to find the dDocTitle field.
so, use document.getElementsByName(“dDocTitle”) and then parse the array (should be only one) to get the element and then set its value to the file name.
Variables Scope

No such thing as variable scoping. All are global. Data pollution can be a problem if you are reckless. But there are selectors to help determine which variable you mean: #active, #env, #local, etc. So, you could have (you never would) a dDocName in the environment (set in config manager), one in local <$dDocName=”foo”$>, and one as the column name of the result set you’re working on. These # values help you identify which one. Better to not have the same name to begin with.

That is why many of the add-ons, etc. all use a variable prefix for all their variables and functions… only way to scope for no crossover or pollution. (i.e. profiles uses dp – document profiles). There are others. If you want your own scope, you have to do that with Java. Many components do this when they just want their own version of variables. Profiles is an example, as it’s changing variables many, many times before they are lastly set in the service call scope. They have a function for that – dpPromote – to change variables that are not automatically promoted by Profiles. Automatic variables are like <var>:isHidden, etc.
Bex’s book is best. Some of this info is obscure…
xFieldName:isExcluded: This field is completely excluded from the page.
xFieldName:isHidden: The field is present but hidden on the page.
xFieldName:isInfoOnly: The field is present, but its value is presented in a read-only
format.
xFieldName:isRelocated: The field has been manually moved to a different place on
the page.
xFieldName:isRequired: The field is required.
xFieldName:include: Set this to an include to use instead of std_display_field to completely
override how this field is displayed.
Also, general page properties are specified this way as well:
isCheckin: True on a check-in new or check-in selected page
isNew: True on a check-in new page
isUpdate: True on an update content info page
isInfo: True on the content info page
isQuery: True on a search page
isDocPage: True if any of the above flags are set
isUploadFieldScript: True when the include should output JavaScript instead of HTML;
used to generate code for check-in and search forms
isFormSubmit: True on a page in which metadata form submission is possible, for example,
update, check-in, or search pages
isEditMode: True on a check-in or update page
Indexing

A Fast rebuild does not reprocess documents (aka no Text Extraction).  It is only working on data in the database.  The Managed Collection cycle (vs cleanup, post cleanup, etc) being the cycle that doe the most processing.  A Fast rebuild is working on the active index.  Starts off with modifying the schema of the base tables (e.g. IDCTEXT1/2) use in the OTS indexing process to add the new indexed columns into the tables. Goes through a process to update new columns in base tables with data from corresponding columns in DocMeta that were added, again standard select/update statements on DB.   If you have done anything to change optimized attributes resulting in SDATA segment changes, it does need to reprocess through all off the data in the active index base table to manipulate data for SDATA.  If you have a lot of rows in your active index base table this can take some time but again all standard database selects/update statements going on.  Processes through all rows marked as pending indexing in OTS index and runs through those calling CTX_DDL.SYNC_INDEX.  Again all DB work so If your DB is up to snuff should be a relatively quick as compared to a Full Rebuild which is orders of magnitude larger in processing time.  Largest variable is going to be based on how many rows you have in your active index base table.

 

October 2014

Q: We currently upload jpegs that we would like to compress as they get sent to wcc.  Can we compress documents as they are being uploaded in wcc?

[Jpeg is already a compressed image. It is by definition a lossy compression format. Attached are two jpeg images, one is 1/2 the size of the other by dialing down (from 100% quality to 90% quality). Point being if you compress with zip the savings are very slim.

If they are asking about documents in general, the choose the database provider option for content storage and use the Secure Files option (always a good thing). This supports de-duplication and compression out of the box, and delivers files just as fast, or faster than file system storage.]

2)   Most of the documents we store in WCC are documents that were mailed to us, not documents that we author.  When reviewing the workflow functionality today, it seemed like the workflows are more suited to documents that are authored and need to be reviewed and approved where as in our  case,  we would like to trigger workflows after documents have been released.  Would this be a correct assumption?  One example of such a scenario at our company would be that we receive a demand letter from a lawyer; I would like to trigger a workflow that would alert a rep that we need to respond to this letter in x number of days and then follow up if it is not completed by a certain date.  So the document would need to be released before this workflow is triggered.

[Excellent use case for BPM. WCC Workflow is all about getting a single item of content approved and released. This is not the use case here. This is more like case management, which is right in BPM’s wheelhouse.]

3)     We have a group of documents (insurance policy documents) that we mail out to our customer in one packet.  When we print the document, it is one big document.  However before we archive the document in WCC we break it up into its’s different sub documents because that is how the reps look for the documents.  The dilemma is that now when we want to reprint the whole document as it was initially,  it has been broken up into different sub docs and we don’t have the order of the docs either.  Will Folio’s solve our problem?  Is there a different way to address this problem?

[Folios is one way to solve the problem. Re-printing mayn’t be exact, as the export as PDF places each content item on a separate page. I assume all the content items have a PDF web rendition.

Another choice is metadata. It looks like they are already using some kind of claims management system, integrated with WCC, which is good. You could have multiple metadata fields (customer number, correspondence number, correspondence date, document ordering number, or just a single metadata field – like customer communication control number – which is an amalgamation of the above fields, perhaps separated by ‘:’ or some such. I would ask of the claims management system has such a control number (customer, claim, correspondence, etc.) that might be useful. Also, the re-assembly might be something that the claims processing app might do.]

4)      One segment of our business uses WCC to store the source code for our online sites.  Have you seen this done before? Is this a recommended use of WCC?

[Yes I have. Remember Site Studio? All of its code (page layouts, fragments, css, js, etc. etc.) as well as the content (no kidding) was stored, revision tracked and approved in WCC. I’ve built websites that had fragments with over 250 revisions. The one challenge of course is that WCC is no GIT or other source code control system. So, how do they want to integrate with whatever IDE they are using to create the websites? If it’s just an archive for this, then it should work no problem.]

Action Conditions for Rules and Content Profiles
If you just have on request by itself, then which page does it refer to?
Likewise if you just have Action Checkin New, then is that on submit or on request?
You essentially need both actions.
It helps to understand a bit about Javascript, because really that is what you are doing.  Taking action on a field with “idoc” which in turn translates mostly into Javascript.
So yes, if you want it hidden when the page is shown, check On Request + Checkin New
It may work if you just check “checkin new” and not specify on request or on submit but those give  you more control.
If you JUST checked the second, on Action Checkin New
Then that condition/rule would fire on both request and submit which may not be what you want.
I think it would simply check the service
However, the form for checkin_new is checkin_new_form
So it may be redundant to check both on request and on action specifically for checkin new
I would just test it, set a default value for a field in a rule.
Then only check on action checkin_new
see if the field gets populated, if it does then you wont need on request.
However, if you then called the checkin new service directly without pulling up the form first I would bet that value wouldnt be set.
So in terms of the native browser I cant see why you could call checkin without the form first but other methods may do that.
So my theory is that the on request only really applies to request of the web form itself.  Since there wouldnt be a web form request for an external checkin
WCC Admin Notes July 2014

Q: How do we work with translations? we upload an english native and a chinese translation. wants to show link to native and also links to the chinese.

4

We usually implement a custom workflow for that. We have a pretty good multi-lingual translation component. create in base language, say english. It creates copies in all of the other languages and launches sub workflows for them to be translated. When all translations are complete, the parent is updated. couple of extra metadata fields. all custom.

Q; How about showing links so users can choose the translation of their choice or they are presented with links that matches their preferences?

When you use the multi-lingual component, it has language as a metadata field, so you can preset that to just see content in your own language.

or content in another language.

History&Purpose of upload Applet: The upload applet serves 2 functions. The first is to allow upload of very large files (> 2GB) by breaking them into pieces uploading the chunks, reassembling the file on the server and then doing the checkin. The second is to upload a group of files, in which case (as you’ve mentioned) it creates a zip file and checks that in. This applet has a deep and checkered past and was implented to solve specific customer problems, and then kept in the product in case other customers had that same problem. The modern way to do it is to use DIS for example and have prompt for metadata set of the folder and then drag and drop a bunch of files. You can set metadata for all the files in one go, or work through them individually.

Notifications of errors: No oob notification of errors. There have been components way in the past that created for example RSS feeds from error messages. It woudl be custom. And that was before WCC ran under WebLogic. Since all the log messages are availablue under EM (content:7001/em), and available on every system, I’d investigate if EM can notify you.

WCC Admin Notes May 2014

1.       Yes, in 11g the files are removed from the FS when moved to the DB. However, this isn’t permanent. When a file is required, the file is extracted from the DB back to the FS for use by the rendering application. So, for example, if the file is a Word document, this cannot be opened directly from inside the DB. The file has to be extracted and then opened from the FS. So although you’re searching and storing documents in the DB, there will be some files in the FS too.

2.       If by clearing down you mean reduce the size of the index (say you’ve deleted a bunch of content), then this is possible through the optimization procedure described in KM 10287777.1 that Jurgen pointed out. If you delete a bunch of content, then the index records are removed, but the space is not recovered until optimization occurs. You should run optimization nightly to keep the index in good shape. This is essential for continued optimum performance.

Not sure about these questions, but I believe the question about the clearing down the search index might be related to the information given in the following blog article:

https://blogs.oracle.com/kyle/entry/full_text_indexing_you_must

 

The following KB article is referenced in there. This article explains clearly how to install a DB job that optimizes and defragments the search index:

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=190130445829762&id=1087777.1&_afrWindowMode=0&_adf.ctrl-state=t6774kt4p_4

1.       The content is stored on the FS for caching and to use as a working copy for full-text indexing. There are config settings which control how long the content stays on the FS after it is stored in the database.

 

http://docs.oracle.com/cd/E29542_01/doc.1111/e26692/filestoresystem.htm#CBBEHFEI

 

12.3.2.1 Database Options

In some situations, content stored in a database may have to be forced onto a file system. One example would be when Oracle WebCenter Content: Inbound Refinery must have access to a file for conversion. Files forced onto a file system are considered temporary cache. The following configuration values are used to control when the temporarily cached files are to be cleaned up. Note that the system only cleans up files that have an entry in the FileCache Table.

Variable Description
FsCacheThreshold Specifies the maximum cache size, in megabytes. The default is 100. When the threshold is met, the Content Server instance starts deleting files that are older than the minimum age, as specified by the FsMinimumFileCacheAge parameter.
FsCleanUpCacheDuringIndexing Specifies if the cache will be cleaned during the indexing cycle. The default is false.
FsCleanUpCacheIndexingMax Specifies the number of cache files to delete in each indexing cycle, which limits the load on the cycle. The default is to delete all eligible cache files for the indexing cycle.
FsMaximumFileCacheAge Specifies the maximum age at which files are cached, expressed in days. The default is 365.
FsMinimumFileCacheAge Specifies the minimum age at which cached files can be deleted, expressed in days. The default is 1. This parameter is used in conjunction with the FsCacheThreshold parameter to determine when to delete cached files.

 

 

WCC Admin Notes Apr 2014

1. Folders_g is an accepted version of folders for WebCenterContent 11g. There is a new updated component called Framework Folders which was introduced in WebCenterContent 11.1.1.6.0. Currently, both components are supported and are acceptable foldering solutions, but framework folders is considered to be the preferred solution for the future. There are no plans in the immediate future to discontinue support for folders_g .

Here is a link to some documentation about framework folders for your review. http://docs.oracle.com/cd/E23943_01/doc.1111/e10797/c08_folder_all.htm#CHDJJACD

Is Folders_g Supported in 11g, can the Contribution Folders view be Customized, and how is it Different from Framework Folders? (Doc ID 1604807.1)

So if you break it down to admin, development and users, the admin doesn’t do much. Mostly infrastructure monitoring, log file checking. For example, getting user attributes from the security infrastructure.

Planning the next upgrade

In production there’s quite a bit of work around monitoring/configuring content replication between instances.

So in there, the developers are building the customizations, so the admin will be restarting servers, etc.

or more practically, you would sandbox a system for the developers and allow them to restart, etc. until dev is complete, and then pass across to admin to install on production instances (and test).

Database in generally better: 1) simpler infrastructure, 2) easier to backup and DR, and 3) generally faster. See this thread for more opinions – https://community.oracle.com/thread/2170742?tstart=0. good benchmark paper – 3.5 years ago but still valid – http://www.oracle.com/us/products/middleware/content-management/ecm-extreme-performance-wp-077977.pdf. Also you will find even better performance with Exa* family of hardware. Having apps (via Web Services or RIDC) can affect this decision – no single blanket statement applicable.

Subscription have been around since 6.x days.

Always supported for either subscription to exact content items (i.e. tell me when Content ID 1234 is revised) or more interestingly tell me when content is created or revised that meets these metadata conditions.

DB full text is for Oracle, but primarily used for SQL Server and other non-Oracle database. Oracle Full Text is for Oracle databases. Both use the Outside/In filters to extract text. You do need to admin occasionally (i.e. weekly) to maintain optimal performance (https://blogs.oracle.com/kyle/entry/full_text_indexing_you_must). Database.FullText can be problematic on large (> 10 MB documents) – http://docs.oracle.com/cd/E29542_01/doc.1111/e26692/searchindex.htm#WCCSA425. OTS give better control over optimizing metadata and text searches (zoning metdata fields, etc.) – with full text all queries must call out metdata values query elements and full text query elements. http://docs.oracle.com/cd/E28280_01/doc.1111/e26692/searchtools.htm#CIHJFGFI

if you give a content item a new security group, the web location changes for the content item so if other documents reference the weblocation of that document (with the new security group) all other docs referring to it need to be updated

Yes. If they use the URL to access.

So security group changes are seldom.

and you can always use for example the GET_FILE service to be independent of that.

hover over the native file in the doc info page to see an example.

so are you using the related content component, or just embedding web layout links in the source content?

That is a component that you can add to WCC that adds to the doc info page to allow users to link content that is related.

The relationship can be parent child, peer to peer, etc.

It’s another way of organizing content besides metadata and folders (which is metadata anyway).

So it’s different than embedding links to content in other documents.

I have seen this with Word or PPT for example

Bring up the content info page on any item of content. hover over the Native File link… in my browser (Chrome) is shows that link at the bottom of the screen – it uses the get_file service. Also, copy the link and paste to a new tab can show this too.

Well, sometimes you have to refer to content… for example in the WebCenter Portal when you reference a piece of content you can use the path (folder path), but that can change, or you can use the Content ID, and that doesn’t change.

And just to go completely down the rabbit hole, the file storage path need not be used at all (i.e. database storage, or webless storage) via the provider setup.

And even using file storage provider, you can adjust the path to not use the security group… doesn’t really mean anything, just a mechanism to divide up content and prevent a single directory from getting thousands of entries.

My word doc native link use get_file.

You can get either the native or web, or any rendition if a DAM image, etc.

yes. So the only issue is permissions.

If you have a link and it’s secured then you won’t be able to read it without logging in… or having logged in having not timed out

All queries are presented to WCC (via the QueryText parameter in the GET_SEARCH_RESULTS service) in a WCC specific format.

that format is outlined here

http://docs.oracle.com/cd/E28280_01/doc.1111/e26695/content_search.htm#i1190006

on the query builder form, click on the show query builder advanced options. in that field you will see the query being built as you enter full text, or add fields.

That is the format that queries are saved in if you save the query from a search results page (look at and edit under My Content Server -> My Saved Queries).

So I pick Content ID, Has Word Prefix (i.e. starts with) and the value ss (looking for Site Studio assets). The query text is actually

dDocName <contains> `ss*`

Note the < and > around operators, and the back quote around values.