Kevin Cummings's Profile
Agile Angel
3573
Points

Questions
5

Answers
233

  • There is nothing in terms of an “interceptor” that I am aware of. It would have to be something in the form of a PX or groovy script that happens right after an object is viewed, and the data written to a log file. The log files would then have to be processed to get information on who had seen what.
      You might want to look at the “sample” code Oracle provides for PXs to see if there is anything like this.

    • 1794 views
    • 3 answers
    • 0 votes
  • If they say to do it, do it.    Did you even have the CTX schema created in your database instance??
     I am not specifically familiar with what they are asking you to do, but if those files are in fact not on your server where Oracle is installed, then they most certainly should be there. I suspect that  they have something to do with character sets, but other than that, no idea.

    • 2430 views
    • 10 answers
    • 0 votes
  • There is a script to drop and recreate the various CTX (full text search) indexes in the database. it is named “agile9_ctx_recreate.sql”. It is located in the same directory as the “recreateagile.bat” script. Note that you should probably run the “agile9_fts_prefs.sql” and “agile9_fts_prefs_lexer_basic.sql” scripts in the CTX schema first (per what is done in the “recreateagile.bat” script).
     It should be able to get the “failed” indexes removed and then recreate them correctly. Try and run that script in the agile schema, and if things are no good, then make sure to run the 2 “fts_prefs” script first and to then run the drop command for each index first and make sure it gets drops. And of course, make sure the the CTX schema exists in the database instance.

    • 2430 views
    • 10 answers
    • 0 votes
  • It isn’t very easy, but it has gotten better as of 9330.
     You can search the ITEM_HISTORY and CHANGE_HISTORY tables to see when a user has created or modified something in the database, but there is no way (that I know of) to get a report on what a user has searched for and/or viewed previous to Agile 9330.
     The “Recent” folder can give a limited list of what they have viewed, but it will only cover however many objects Agile is configured to be displayed (10 is the default, but it can be increased up to 100). As of Agile 9330, a setting (Record Recently Visited History) can be set so that all objects a user viewed is logged in the database to the VISIT_HISTORY table (I think). Note that this will record *everything* that  the user viewed, so that table will probably fill rather quickly. No idea if when a user looks at the same object multiple times, will it record ALL such views, or only once per session. I have yet to see a client that has it enabled.
     There is also a setting as of Agile 9340 (Record Simple Search) that tracks what a user has been trying to find, but only when using Simple Search (Advanced Search is not tracked). They have been adding more tracking stuff in the past few releases.

    • 1794 views
    • 3 answers
    • 0 votes
  • Agile Angel Asked on December 26, 2016 in Agile PLM (v9).

    So far as I know, Oracle does not recommend any specific period of time after which it is a good idea that the Agile application server should be stopped/started. I do know folks who stop everything, take a cold backup and restart once a week (as well as having warm backups done during the week). And others where they do it once a month.
     A lot would depend on your production environment. Is it 24/7?? If so, then you need to carefully schedule when this might be done so as to minimize down-time, and so would tend to do it less often. Does your environment require a restart every once in a while for some reason (crash or performance just slows WAY down)??  If so, then you would need to figure out when to schedule restarts before something like that happens (again, hard to do when you need to be up and running 24/7).
     As a rule of thumb, if you are not seeing any slowdown/performance/crash issues, once a month (or even every couple of months) would be fine. If you are seeing such issues, then schedule restarts in order to prevent such issues from having an impact during the middle of the work day.
     If you are seeing such issues more often than once a week, you should probably look into upgrading your hardware or network for the application. These days, the Agile application is pretty stable unless it is running on hardware that cannot support the workload, or across a network whose bandwidth isn’t enough to allow reasonable response times.

    • 2506 views
    • 4 answers
    • 0 votes
  • When you import a new database, the usual procedure is to drop the old user and create a new one. As part of the script to do that, there is the following :
    declare
    type_exists number;
    sql_command varchar2(200);
    begin
    select count(1) into type_exists from user_objects where object_name = ‘T_NUMBERS’ and object_type=’TYPE’;
    if (type_exists = 0) then
    sql_command := ‘create type t_numbers as table of number(10)’;
    execute immediate sql_command;
    end if;
    end;
    /

    grant all on t_numbers to agile;

     For whatever reason, this is missing, Run all of the above SQL in the sys account, and the error concerning T_NUMBERS will go away. All of this can be found in the USERAGILE.SQL script that is located in the D:oracle12adminagile9createagile directory where the RECREATEAGILE.BAT file is located.

    • 2430 views
    • 10 answers
    • 0 votes
  • Agile Angel Asked on December 23, 2016 in Agile PLM (v9).

    Agreed with Danny. Any time you get a java.lang.NullPointerException error, it means that Agile was expecting to *always* get something back in an attribute or for a query, and what it got was a null.
     Is this for a specific object, or for any Document object????   Are you good with doing a save-as on Parts??   Although running Averify is the best/first thing to do, if the issue continues, reply back to this thread and I can provide some further things to look at in the database.

    • 1397 views
    • 2 answers
    • 0 votes
  • My apologies, I mis-read your question.
    Yes, the list parent ID is stored in PROPERTYTABLE.SELECTION where PROPERTYID=15. In general, the list ID is associated directly to the attribute. But for some cover/title page attributes (like PRODUCT_LINES), it is associated to the underlying base attribute because it has a list assigned out-of-the-box. I normally run a script to put all list parent IDs into a table with other information (like is it a cascade  or dynamic list) so it is easily found. but if you need something to find the list parent ID for a single attribute, you can use the following function :

    create or replace function ListParent(attrID IN number, inherID in number) RETURN number IS

    csrID number;
    result varchar2(100);
    listID number;

    cursor csr_UTyp is select value from propertytable where parentid = csrID and propertyid = 2;
    cursor csr_ALst is select selection from propertytable where parentid = csrID and propertyid = 15;

    BEGIN
    — Find out what the data type of the attribute is
    csrID := attrID;
    OPEN csr_UTyp;
    FETCH csr_UTyp INTO result;
    IF csr_UTyp%notfound THEN
    CLOSE csr_UTyp;
    csrID := inherID;
    OPEN csr_UTyp;
    FETCH csr_UTyp INTO result;
    END IF;
    CLOSE csr_UTyp;
    result := trim(result);

    — Make sure that we only process when LIST or MULTILIST or WEIGHT or MONEY
    IF result = ‘1’ OR result = ‘2’ or result = ‘5’ or result = ‘6’ THEN

    — Now get the list parent ID from PROPERTYTABLE
    listID := 0;

    csrID := attrID;
    OPEN csr_ALst;
    FETCH csr_ALst INTO listID;
    IF csr_ALst%notfound THEN
    CLOSE csr_ALst;
    csrID := inherID;
    OPEN csr_ALst;
    FETCH csr_ALst INTO listID;
    END IF;
    CLOSE csr_ALst;

    ELSE
    listID := 0;
    END IF;

    RETURN listID;

    END;
    /
    show err

     If it is not a list-type of attribute, the function returns a zero. If the base attribute doesn’t have a list assigned, it looks to see if the INHERIT attribute has one assigned.

    This answer accepted by BurhanBKB. on April 19, 2024 Earned 15 points.

    • 3215 views
    • 3 answers
    • 0 votes
  • There is a script named “dbmspool.sql” located in %ORACLE_HOME%/RDBMS/ADMIN that you need to run under the sys account (as sysdba). This script defines the “dbms_shared_pool” package and after running this script the various Agile packages will have access to that Oracle package.

    • 2430 views
    • 10 answers
    • 0 votes
  • What version of Agile is this for???
     For 9.0.x and beyond, the list values are actually stored in LISTENTRY. The LISTNAME table is where the list parent information is stored. PROPERTYTABLE is no longer used for lists (that was for Agile 8.5 and earlier), it now is used mostly just for storing properties of NODETABLE objects.
     For the most part, you can simply get the list text value by linking the attribute directly to LISTENTRY using ENTRYID (see the query below). It is a bit more complicated for Multi-List attributes, as you must parse out the individual IDs and then get the text value for each one. In addition, note that if the multi-list attribute is overflowed (too many ID values to fit in the length), you need to go to the MSATT table to get the ID values. It can also get VERY complicated when using out-of-the-box lists as they sometimes have non-unique ID values, so you *must* use the list parent ID.

     A query to show the values for LIST01 would be as follows :
    select i.item_number, l.entryvalue from item i, listentry l, page_two p
     where i.id = p.id and i.class=p.class and p.list01 = l.entryid(+) and l.parentid=(select selection from propertytable where parentid=2020 and propertyid=10);

     Given that the list assigned to the attribute changes *very* little, you are better off looking up the list parent ID rather then trying to embed that lookup into the query. Also note that it is not always assigned directly to the attribute, but maybe to the base attribute it inherits from (although that usually only applies to attributes that have a list assigned out-of-the-box, like PRODUCT LINES). Given that the list attribute may not have a value, use an outer join between the attribute and ENTRYID so that you can see that some values are null.

     Also note I have not touched on cascade lists. That is an entirely separate issue to try and get values, as you must start with the ID in the attribute, and then climb the list hierarchy to get the entire value. Dynamic lists (which use the IDs of objects in the database) are not very hard, so long as you can determine what the object type is that you need to select from.

    • 3215 views
    • 3 answers
    • 0 votes