SSRS - Is there a multi thread safe way of displaying information from a DataSet in a Report Header?
In order to dynamically display data in the Report Header based in the current record of the Dataset, we started using Shared Variables, we initially used ReportItems!SomeTextbox.Value, but we noticed that when SomeTextbox was not rendered in the body
(usually because a comment section grow to occupy most of the page if not more than one page), then the ReportItem printed a blank/null value.
So, a method was defined in the Code section of the report that would set the value to the shared variable:
public shared Params as String
public shared Function SetValues(Param as String ) as String
Params = Param
Return Params
End Function
Which would be called in the detail section of the tablix, then in the header a textbox would hold the following expression:
=Code.Params
This worked beautifully since, it now didn't mattered that the body section didn't had the SetValues call, the variable persited and the Header displayed the correct value. Our problem now is that when the report is being called in different threads with
different data, the variable being shared/static gets modified by all the reports being run at the same time.
So far I've tried several things:
- The variables need to be shared, otherwise the value set in the Body can't be seen by the header.
- Using Hashtables behaves exactly like the ReportItem option.
- Using a C# DLL with non static variables to take care of this, didn't work because apparently when the DLL is being called by the Body generates a different instance of the DLL than when it's called from the header.
So is there a way to deal with this issue in a multi thread safe way?
Thanks in advance!
Hi Angel,
Per my understanding that you want to dynamic display the group data in the report header, you have set page break based on the group, so when click to the next page, the report hearder will change according to the value in the group, when you are using
the shared variables you got the multiple thread safe problem, right?
I have tested on my local environment and can reproduce the issue, according to the multiple safe problem the better way is to use the harshtable behaves in the custom code, you have mentioned that you have tryied touse the harshtable but finally got
the same result as using the ReportItem!TextBox.Value, the problem can be cuased by the logic of the code that not works fine.
Please reference to the custom code below which works fine and can get all the expect value display on every page:
Shared ht As System.Collections.Hashtable = New System.Collections.Hashtable
Public Function SetGroupHeader( ByVal group As Object _
,ByRef groupName As String _
,ByRef userID As String) As String
Dim key As String = groupName & userID
If Not group Is Nothing Then
Dim g As String = CType(group, String)
If Not (ht.ContainsKey(key)) Then
' must be the first pass so set the current group to group
ht.Add(key, g)
Else
If Not (ht(key).Equals(g)) Then
ht(key) = g
End If
End If
End If
Return ht(key)
End Function
Using this exprssion in the textbox of the reportheader:
=Code.SetGroupHeader(ReportItems!Language.Value,"GroupName", User!UserID)
Links belowe about the hashtable and the mutiple threads safe problem for your reference:
http://stackoverflow.com/questions/2067537/ssrs-code-shared-variables-and-simultaneous-report-execution
http://sqlserverbiblog.wordpress.com/2011/10/10/using-custom-code-functions-in-reporting-services-reports/
If you still have any problem, please feel free to ask.
Regards
Vicky Liu
Similar Messages
-
Is there a way of transferring information from word processing apps to a laptop that is not connected to the Internet?
Yes - but - you need an app that supports file sharing and you still need iTunes on a computer, or you need an app like Folder Plus that lets you mount the iPad like a USB drive. You need the helper app on the computer as well.
iOS: About File Sharing
File Manager - Folder Plus for iPhone, iPod touch, and iPad -
How can I use a Selector in a thread safe way?
Hello,
I'm using a server socket with a java.nio.channels.Selector contemporarily by 3 different threads (this number may change in the future).
From the javadoc: Selectors are themselves safe for use by multiple concurrent threads; their key sets, however, are not.
Following this advise, I wrote code in this way:
List keys = new LinkedList(); //private key list for each thread
while (true) {
keys.clear();
synchronized(selector) {
int num = selector.select();
if (num == 0)
continue;
Set selectedKeys = selector.selectedKeys();
//I expected this code to produce disjoint key sets on each thread...
keys.addAll(selectedKeys);
selectedKeys.clear();
Iterator it = keys.iterator();
while (it.hasNext()) {
SelectionKey key = (SelectionKey) it.next();
if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {
Socket s = serverSocket.accept();
SocketChannel sc = s.getChannel();
sc.configureBlocking( false );
sc.register( selector, SelectionKey.OP_READ );
} else if ((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
//.....Unfortunately synchronizing on the selector didn't have the effect I expected. When another thread select()s, it sees the same key list as the other thread that select()ed previously. When control arrives to serverSocket.accept(), one thread goes ahead and the other two catch an IllegalBlockingModeException.
I'm not willing to handle this exception, the right thing to do is giving disjoint key sets to each thread. How can I achieve this goal?
Thanks in advanceA single thread won't be enough cause after reading data from the socket I do some processing on it that may take long.So despatch that processing to a separate thread.
Most of this processing is I/O boundI/O bound on the socket? or something else? If it's I/O bound on the socket that's even more of a reason to use a single thread.
Anyway I think I'll use a single thread with the selector, put incoming data in a queue and let other 2 or 3 threads read from it.Precisely. Ditto outbound data.
Thanks for your replies. But I'm still curious: why is a selector thread safe if it can't be used with multiple threads because of it's semantics?It can, but there are synchronization issues to overcome (with Selector.wakeup()), and generally the cost of solving these is much higher than the cost of a single-threaded selector solution with worker threads for the application processing. -
Is ABAP multi-threading safe?
When implementing the Singleton design pattern in Java, we must use keyword <b>synchronized</b> with <b>getInstance()</b> method to ensure multi-threading safety, so that we can get the one and only instance.
What shall I do in ABAP? or just leave it alone? Would you help me find a example?
thanks and regards,
Davin,WANGHi Davin,
I do not understand fully what you are going to do in ABAP terms so I hope my comment will be of any value.
Multithreading may be achieved in ABAB by calling a function with the addition STARTING NEW TASK IN GROUP.... See my sample program for <a href="https://wiki.sdn.sap.com/wiki/display/Snippets/Easilyimplementparallelprocessinginonlineandbatchprocessing">Easily implement parallel processing in online and batch processing</a>
The second question may be solved by help of SAP lock concept. This is used primarily to secure a consistent database by not allowing two processes to change data at the same time. Chose a lock object of your choice and set at start of first instance. At end, remove the lock. Before creating the second instance, try so set the same lock. If you get a foreign lock error, you know the process is running.
See documentation on lock objects on how to lock/unlock.
Regards,
Clemens
Hope your internet connection is broken no longer so you can read this. -
Need thread safe way to access read-only objects
I have been working on a lot of projects and all the developers agree that they want thread safe code when called by many threads. It's rare developers are making statement like: "Data are not corrupted often so don't bother" or "It's not thread safe, but that will not often create issues".
In TopLink client session itself is thread safe but not the persistent object themselves. Via client session, if you want thread safe access you need to put a lock on CacheKey and it's not a public/supported API. So the only thread safe access is via unit of work.
We would like fast access to objects. We have a batch process that just need read-only access to objects. We need to read via unit of work to get thread safe access. But we just need the clone when we read via unit of work, we don't need the backup for change detection.
However, TopLink doesn't have a mean to do that.
Please push implementation of Bug5998333[WANT THREAD SAFE AND CORRECT ISOLATION WITH OBJECTS FROM ADDREADONLYCLASS]
In Hibernate, by design, all access are always thread safe. Accessing read-only object just create one copy (a clone), no backup needed.
Oracle claims that TopLink is fast. I wonder if their performance testing code is thread safe, so access objects via unit of work or they take the shortcut of accessing objects from client session. Also, reliable performance comparison should use conform in unit of work.As you stated the UnitOfWork offers you your desired functionality, you would just like an improvement in performance.
In TopLink 10.1.3 (or 11g preview) you have a few options:
- Use a UnitOfWork an live with the slight overhead of the back copies (it will only add 5-30 % overhead to your processing)
- Instead use an isolated client session, this will not require any cloning or backup clones, but also does not allow any caching.
- Use change tracking, TopLink added attribute-level change tracking in 10.1.3, when used the UnitOfWork does not create backup clones. In 10.1.3 it was mainly used for CMP and requires code generation, but you could implement or weave the code yourself. In TopLink 11g, change tracking is weaved by default with JPA and the weaver can also be used with POJO objects.
I agree that having a feature to mark an object as transactionally read-only would be desirable, it seems like you have logged the enhancement. You could try escalting the enhancement through Oracle support, but since it is an enhancement and not a bug, it is probably beyond what support offers. You may wish to investigate services, or potentially join the open source Eclipse EclipseLink project which the next version of TopLink is being developed under and take part in the feature yourself. -
Is there a way to extract information from a registered schema ?
Hello,
with the aid of the XSOM project in java.net, and using the following after I loaded the appropriate jars and creating the wrapper PL/SQL
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED GMS10.XSOMNAVIGATOR AS
import java.util.Vector;
import com.sun.xml.xsom.XSComplexType;
import com.sun.xml.xsom.XSElementDecl;
import com.sun.xml.xsom.XSFacet;
import com.sun.xml.xsom.XSModelGroup;
import com.sun.xml.xsom.XSModelGroupDecl;
import com.sun.xml.xsom.XSParticle;
import com.sun.xml.xsom.XSRestrictionSimpleType;
import com.sun.xml.xsom.XSSimpleType;
import com.sun.xml.xsom.XSTerm;
import com.sun.xml.xsom.parser.XSOMParser;
public class XSOMNavigator
public static class SimpleTypeRestriction
public String[] enumeration = null;
public String maxValue = null;
public String minValue = null;
public String length = null;
public String maxLength = null;
public String minLength = null;
public String[] pattern = null;
public String totalDigits = null;
public String toString()
String enumValues = "";
if (enumeration != null)
for(String val : enumeration)
enumValues += val + ", ";
enumValues = enumValues.substring(0, enumValues.lastIndexOf(','));
String patternValues = "";
if (pattern != null)
for(String val : pattern)
patternValues += "(" + val + ")|";
patternValues = patternValues.substring(0, patternValues.lastIndexOf('|'));
String retval = "";
retval += maxValue == null ? "" : "[MaxValue = " + maxValue + "]\t";
retval += minValue == null ? "" : "[MinValue = " + minValue + "]\t";
retval += maxLength == null ? "" : "[MaxLength = " + maxLength + "]\t";
retval += minLength == null ? "" : "[MinLength = " + minLength + "]\t";
retval += pattern == null ? "" : "[Pattern(s) = " + patternValues + "]\t";
retval += totalDigits == null ? "" : "[TotalDigits = " + totalDigits + "]\t";
retval += length == null ? "" : "[Length = " + length + "]\t";
retval += enumeration == null ? "" : "[Values = " + enumValues + "]\t";
return retval;
private static void initRestrictions(XSSimpleType xsSimpleType, SimpleTypeRestriction simpleTypeRestriction)
XSRestrictionSimpleType restriction = xsSimpleType.asRestriction();
if (restriction != null)
Vector<String> enumeration = new Vector<String>();
Vector<String> pattern = new Vector<String>();
for (XSFacet facet : restriction.getDeclaredFacets())
if (facet.getName().equals(XSFacet.FACET_ENUMERATION))
enumeration.add(facet.getValue().value);
if (facet.getName().equals(XSFacet.FACET_MAXINCLUSIVE))
simpleTypeRestriction.maxValue = facet.getValue().value;
if (facet.getName().equals(XSFacet.FACET_MININCLUSIVE))
simpleTypeRestriction.minValue = facet.getValue().value;
if (facet.getName().equals(XSFacet.FACET_MAXEXCLUSIVE))
simpleTypeRestriction.maxValue = String.valueOf(Integer.parseInt(facet.getValue().value) - 1);
if (facet.getName().equals(XSFacet.FACET_MINEXCLUSIVE))
simpleTypeRestriction.minValue = String.valueOf(Integer.parseInt(facet.getValue().value) + 1);
if (facet.getName().equals(XSFacet.FACET_LENGTH))
simpleTypeRestriction.length = facet.getValue().value;
if (facet.getName().equals(XSFacet.FACET_MAXLENGTH))
simpleTypeRestriction.maxLength = facet.getValue().value;
if (facet.getName().equals(XSFacet.FACET_MINLENGTH))
simpleTypeRestriction.minLength = facet.getValue().value;
if (facet.getName().equals(XSFacet.FACET_PATTERN))
pattern.add(facet.getValue().value);
if (facet.getName().equals(XSFacet.FACET_TOTALDIGITS))
simpleTypeRestriction.totalDigits = facet.getValue().value;
if (enumeration.size() > 0)
simpleTypeRestriction.enumeration = enumeration.toArray(new String[] {});
if (pattern.size() > 0)
simpleTypeRestriction.pattern = pattern.toArray(new String[] {});
private static void printParticle(XSParticle particle, String occurs, String absPath, String indent)
occurs = " MinOccurs = " + particle.getMinOccurs() + ", MaxOccurs = " + particle.getMaxOccurs();
XSTerm term = particle.getTerm();
if (term.isModelGroup())
printGroup(term.asModelGroup(), occurs, absPath, indent);
else if(term.isModelGroupDecl())
printGroupDecl(term.asModelGroupDecl(), occurs, absPath, indent);
else if (term.isElementDecl())
printElement(term.asElementDecl(), occurs, absPath, indent);
else
private static void printGroup(XSModelGroup modelGroup, String occurs, String absPath, String indent)
System.out.println(indent + "[Start of " + modelGroup.getCompositor() + occurs + "]" );
for (XSParticle particle : modelGroup.getChildren())
printParticle(particle, occurs, absPath, indent + "\t");
System.out.println(indent + "[End of " + modelGroup.getCompositor() + "]");
private static void printGroupDecl(XSModelGroupDecl modelGroupDecl, String occurs, String absPath, String indent)
System.out.println(indent + "[Group " + modelGroupDecl.getName() + occurs + "]");
printGroup(modelGroupDecl.getModelGroup(), occurs, absPath, indent);
private static void printComplexType(XSComplexType complexType, String occurs, String absPath, String indent)
System.out.println();
XSParticle particle = complexType.getContentType().asParticle();
if (particle != null)
printParticle(particle, occurs, absPath, indent);
private static void printSimpleType(XSSimpleType simpleType, String occurs, String absPath, String indent)
SimpleTypeRestriction restriction = new SimpleTypeRestriction();
initRestrictions(simpleType, restriction);
System.out.println(restriction.toString());
private static void printElement(XSElementDecl element, String occurs, String absPath, String indent)
absPath += "/" + element.getName();
System.out.print(indent + "[Element " + absPath + " " + occurs + "] of type [" + element.getType().getBaseType().getName() + "]");
if (element.getType().isComplexType())
printComplexType(element.getType().asComplexType(), occurs, absPath, indent);
else
printSimpleType(element.getType().asSimpleType(), occurs, absPath, indent);
public static void xsomNavigate(String xsdFile, String rootElement)
String occurs = "";
String absPath = "";
String indent = "";
try
XSOMParser parser = new XSOMParser();
parser.parse(xsdFile);
printElement(parser.getResult().getSchema(1).getElementDecl(rootElement), occurs, absPath, indent);
catch (Exception exp)
exp.printStackTrace(System.out);
/I obtained the following (correct) result
[Element /CD026A ] of type [anyType]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Group HEADER MinOccurs = 1, MaxOccurs = 1]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Element /CD026A/SynIdeMES1 MinOccurs = 1, MaxOccurs = 1] of type [string][Values = UNOC]
[Element /CD026A/SynVerNumMES2 MinOccurs = 1, MaxOccurs = 1] of type [string][Values = 3]
[Element /CD026A/MesSenMES3 MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 70]
[Element /CD026A/SenIdeCodQuaMES4 MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 4]
[Element /CD026A/MesRecMES6 MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 35]
[Element /CD026A/RecIdeCodQuaMES7 MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 4]
[Element /CD026A/DatOfPreMES9 MinOccurs = 1, MaxOccurs = 1] of type [nonNegativeInteger][Pattern(s) = ([1-2][0-9]{3}[0][1-9][0][1-9])|([1-2][0-9]{3}[0][1-9][1|2][0-9])|([1-2][0-9]{3}[0][1-9][3][0|1])|([1-2][0-9]{3}[1][0-2][0][1-9])|([1-2][0-9]{3}[1][0-2][1|2][0-9])|([1-2][0-9]{3}[1][0-2][3][0|1])|([0-9]{2}[0][1-9][0][1-9])|([0-9]{2}[0][1-9][1|2][0-9])|([0-9]{2}[0][1-9][3][0|1])|([0-9]{2}[1][0-2][0][1-9])|([0-9]{2}[1][0-2][1|2][0-9])|([0-9]{2}[1][0-2][3][0|1])]
[Element /CD026A/TimOfPreMES10 MinOccurs = 1, MaxOccurs = 1] of type [string][Pattern(s) = ([0-1]{1}[0-9]{1}[0-5]{1}[0-9]{1})|([2]{1}[0-3]{1}[0-5]{1}[0-9]{1})] [Length = 4]
[Element /CD026A/IntConRefMES11 MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 14]
[Element /CD026A/RecRefMES12 MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 14]
[Element /CD026A/RecRefQuaMES13 MinOccurs = 0, MaxOccurs = 1] of type [string][Length = 2]
[Element /CD026A/AppRefMES14 MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 14]
[Element /CD026A/PriMES15 MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 1]
[Element /CD026A/AckReqMES16 MinOccurs = 0, MaxOccurs = 1] of type [nonNegativeInteger][Values = 0, 1]
[Element /CD026A/ComAgrIdMES17 MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 35]
[Element /CD026A/TesIndMES18 MinOccurs = 0, MaxOccurs = 1] of type [nonNegativeInteger][Values = 0, 1]
[Element /CD026A/MesIdeMES19 MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 14]
[Element /CD026A/MesTypMES20 MinOccurs = 1, MaxOccurs = 1] of type [string][Values = CC004A, CC005A, CC007A, CC008A, CC009A, CC013A, CC014A, CC015A, CC016A, CC017A, CC019A, CC021A, CC023A, CC025A, CC026A, CC028A, CC029A, CC035A, CC043A, CC044A, CC045A, CC051A, CC054A, CC055A, CC058A, CC060A, CC062A, CC100A, CC102A, CC103A, CC224A, CC225A, CC228A, CC229A, CC231A, CC907A, CC917A, CD001A, CD002A, CD003A, CD006A, CD010A, CD018A, CD020A, CD024A, CD027A, CD030A, CD031A, CD032A, CD033A, CD034A, CD037A, CD038A, CD050A, CD059A, CD063A, CD104A, CD105A, CD106A, CD111A, CD112A, CD114A, CD115A, CD118A, CD200A, CD201A, CD203A, CD204A, CD205A, CD209A, CD411A, CD901A, CD904A, CD905A, CD906A, CD907A, CD912A, CD913A, CD914A, CD916A, CD931A, CD932A, AT004A, AT005A, AT007A, AT008A, AT009A, AT013A, AT014A, AT015A, AT016A, AT017A, AT019A, AT021A, AT023A, AT025A, AT026A, AT028A, AT029A, AT035A, AT043A, AT044A, AT045A, AT051A, AT054A, AT055A, AT058A, AT060A, AT062A, AT100A, AT102A, AT103A, AT224A, AT225A, AT228A, AT229A, AT231A, AT907A, AT917A, BE004A, BE005A, BE007A, BE008A, BE009A, BE013A, BE014A, BE015A, BE016A, BE017A, BE019A, BE021A, BE023A, BE025A, BE026A, BE028A, BE029A, BE035A, BE043A, BE044A, BE045A, BE051A, BE054A, BE055A, BE058A, BE060A, BE062A, BE100A, BE102A, BE103A, BE224A, BE225A, BE228A, BE229A, BE231A, BE907A, BE917A, CY004A, CY005A, CY007A, CY008A, CY009A, CY013A, CY014A, CY015A, CY016A, CY017A, CY019A, CY021A, CY023A, CY025A, CY026A, CY028A, CY029A, CY035A, CY043A, CY044A, CY045A, CY051A, CY054A, CY055A, CY058A, CY060A, CY062A, CY100A, CY102A, CY103A, CY224A, CY225A, CY228A, CY229A, CY231A, CY907A, CY917A, CZ004A, CZ005A, CZ007A, CZ008A, CZ009A, CZ013A, CZ014A, CZ015A, CZ016A, CZ017A, CZ019A, CZ021A, CZ023A, CZ025A, CZ026A, CZ028A, CZ029A, CZ035A, CZ043A, CZ044A, CZ045A, CZ051A, CZ054A, CZ055A, CZ058A, CZ060A, CZ062A, CZ100A, CZ102A, CZ103A, CZ224A, CZ225A, CZ228A, CZ229A, CZ231A, CZ907A, CZ917A, DE004A, DE005A, DE007A, DE008A, DE009A, DE013A, DE014A, DE015A, DE016A, DE017A, DE019A, DE021A, DE023A, DE025A, DE026A, DE028A, DE029A, DE035A, DE043A, DE044A, DE045A, DE051A, DE054A, DE055A, DE058A, DE060A, DE062A, DE100A, DE102A, DE103A, DE224A, DE225A, DE228A, DE229A, DE231A, DE907A, DE917A, DK004A, DK005A, DK007A, DK008A, DK009A, DK013A, DK014A, DK015A, DK016A, DK017A, DK019A, DK021A, DK023A, DK025A, DK026A, DK028A, DK029A, DK035A, DK043A, DK044A, DK045A, DK051A, DK054A, DK055A, DK058A, DK060A, DK062A, DK100A, DK102A, DK103A, DK224A, DK225A, DK228A, DK229A, DK231A, DK907A, DK917A, EE004A, EE005A, EE007A, EE008A, EE009A, EE013A, EE014A, EE015A, EE016A, EE017A, EE019A, EE021A, EE023A, EE025A, EE026A, EE028A, EE029A, EE035A, EE043A, EE044A, EE045A, EE051A, EE054A, EE055A, EE058A, EE060A, EE062A, EE100A, EE102A, EE103A, EE224A, EE225A, EE228A, EE229A, EE231A, EE907A, EE917A, ES004A, ES005A, ES007A, ES008A, ES009A, ES013A, ES014A, ES015A, ES016A, ES017A, ES019A, ES021A, ES023A, ES025A, ES026A, ES028A, ES029A, ES035A, ES043A, ES044A, ES045A, ES051A, ES054A, ES055A, ES058A, ES060A, ES062A, ES100A, ES102A, ES103A, ES224A, ES225A, ES228A, ES229A, ES231A, ES907A, ES917A, FI004A, FI005A, FI007A, FI008A, FI009A, FI013A, FI014A, FI015A, FI016A, FI017A, FI019A, FI021A, FI023A, FI025A, FI026A, FI028A, FI029A, FI035A, FI043A, FI044A, FI045A, FI051A, FI054A, FI055A, FI058A, FI060A, FI062A, FI100A, FI102A, FI103A, FI224A, FI225A, FI228A, FI229A, FI231A, FI907A, FI917A, FR004A, FR005A, FR007A, FR008A, FR009A, FR013A, FR014A, FR015A, FR016A, FR017A, FR019A, FR021A, FR023A, FR025A, FR026A, FR028A, FR029A, FR035A, FR043A, FR044A, FR045A, FR051A, FR054A, FR055A, FR058A, FR060A, FR062A, FR100A, FR102A, FR103A, FR224A, FR225A, FR228A, FR229A, FR231A, FR907A, FR917A, GB004A, GB005A, GB007A, GB008A, GB009A, GB013A, GB014A, GB015A, GB016A, GB017A, GB019A, GB021A, GB023A, GB025A, GB026A, GB028A, GB029A, GB035A, GB043A, GB044A, GB045A, GB051A, GB054A, GB055A, GB058A, GB060A, GB062A, GB100A, GB102A, GB103A, GB224A, GB225A, GB228A, GB229A, GB231A, GB907A, GB917A, GF004A, GF005A, GF007A, GF008A, GF009A, GF013A, GF014A, GF015A, GF016A, GF017A, GF019A, GF021A, GF023A, GF025A, GF026A, GF028A, GF029A, GF035A, GF043A, GF044A, GF045A, GF051A, GF054A, GF055A, GF058A, GF060A, GF062A, GF100A, GF102A, GF103A, GF224A, GF225A, GF228A, GF229A, GF231A, GF907A, GF917A, GP004A, GP005A, GP007A, GP008A, GP009A, GP013A, GP014A, GP015A, GP016A, GP017A, GP019A, GP021A, GP023A, GP025A, GP026A, GP028A, GP029A, GP035A, GP043A, GP044A, GP045A, GP051A, GP054A, GP055A, GP058A, GP060A, GP062A, GP100A, GP102A, GP103A, GP224A, GP225A, GP228A, GP229A, GP231A, GP907A, GP917A, GR004A, GR005A, GR007A, GR008A, GR009A, GR013A, GR014A, GR015A, GR016A, GR017A, GR019A, GR021A, GR023A, GR025A, GR026A, GR028A, GR029A, GR035A, GR043A, GR044A, GR045A, GR051A, GR054A, GR055A, GR058A, GR060A, GR062A, GR100A, GR102A, GR103A, GR224A, GR225A, GR228A, GR229A, GR231A, GR907A, GR917A, HU004A, HU005A, HU007A, HU008A, HU009A, HU013A, HU014A, HU015A, HU016A, HU017A, HU019A, HU021A, HU023A, HU025A, HU026A, HU028A, HU029A, HU035A, HU043A, HU044A, HU045A, HU051A, HU054A, HU055A, HU058A, HU060A, HU062A, HU100A, HU102A, HU103A, HU224A, HU225A, HU228A, HU229A, HU231A, HU907A, HU917A, IE004A, IE005A, IE007A, IE008A, IE009A, IE013A, IE014A, IE015A, IE016A, IE017A, IE019A, IE021A, IE023A, IE025A, IE026A, IE028A, IE029A, IE035A, IE043A, IE044A, IE045A, IE051A, IE054A, IE055A, IE058A, IE060A, IE062A, IE100A, IE102A, IE103A, IE224A, IE225A, IE228A, IE229A, IE231A, IE907A, IE917A, IT004A, IT005A, IT007A, IT008A, IT009A, IT013A, IT014A, IT015A, IT016A, IT017A, IT019A, IT021A, IT023A, IT025A, IT026A, IT028A, IT029A, IT035A, IT043A, IT044A, IT045A, IT051A, IT054A, IT055A, IT058A, IT060A, IT062A, IT100A, IT102A, IT103A, IT224A, IT225A, IT228A, IT229A, IT231A, IT907A, IT917A, LT004A, LT005A, LT007A, LT008A, LT009A, LT013A, LT014A, LT015A, LT016A, LT017A, LT019A, LT021A, LT023A, LT025A, LT026A, LT028A, LT029A, LT035A, LT043A, LT044A, LT045A, LT051A, LT054A, LT055A, LT058A, LT060A, LT062A, LT100A, LT102A, LT103A, LT224A, LT225A, LT228A, LT229A, LT231A, LT907A, LT917A, LU004A, LU005A, LU007A, LU008A, LU009A, LU013A, LU014A, LU015A, LU016A, LU017A, LU019A, LU021A, LU023A, LU025A, LU026A, LU028A, LU029A, LU035A, LU043A, LU044A, LU045A, LU051A, LU054A, LU055A, LU058A, LU060A, LU062A, LU100A, LU102A, LU103A, LU224A, LU225A, LU228A, LU229A, LU231A, LU907A, LU917A, LV004A, LV005A, LV007A, LV008A, LV009A, LV013A, LV014A, LV015A, LV016A, LV017A, LV019A, LV021A, LV023A, LV025A, LV026A, LV028A, LV029A, LV035A, LV043A, LV044A, LV045A, LV051A, LV054A, LV055A, LV058A, LV060A, LV062A, LV100A, LV102A, LV103A, LV224A, LV225A, LV228A, LV229A, LV231A, LV907A, LV917A, MC004A, MC005A, MC007A, MC008A, MC009A, MC013A, MC014A, MC015A, MC016A, MC017A, MC019A, MC021A, MC023A, MC025A, MC026A, MC028A, MC029A, MC035A, MC043A, MC044A, MC045A, MC051A, MC054A, MC055A, MC058A, MC060A, MC062A, MC100A, MC102A, MC103A, MC224A, MC225A, MC228A, MC229A, MC231A, MC907A, MC917A, MQ004A, MQ005A, MQ007A, MQ008A, MQ009A, MQ013A, MQ014A, MQ015A, MQ016A, MQ017A, MQ019A, MQ021A, MQ023A, MQ025A, MQ026A, MQ028A, MQ029A, MQ035A, MQ043A, MQ044A, MQ045A, MQ051A, MQ054A, MQ055A, MQ058A, MQ060A, MQ062A, MQ100A, MQ102A, MQ103A, MQ224A, MQ225A, MQ228A, MQ229A, MQ231A, MQ907A, MQ917A, MT004A, MT005A, MT007A, MT008A, MT009A, MT013A, MT014A, MT015A, MT016A, MT017A, MT019A, MT021A, MT023A, MT025A, MT026A, MT028A, MT029A, MT035A, MT043A, MT044A, MT045A, MT051A, MT054A, MT055A, MT058A, MT060A, MT062A, MT100A, MT102A, MT103A, MT224A, MT225A, MT228A, MT229A, MT231A, MT907A, MT917A, NL004A, NL005A, NL007A, NL008A, NL009A, NL013A, NL014A, NL015A, NL016A, NL017A, NL019A, NL021A, NL023A, NL025A, NL026A, NL028A, NL029A, NL035A, NL043A, NL044A, NL045A, NL051A, NL054A, NL055A, NL058A, NL060A, NL062A, NL100A, NL102A, NL103A, NL224A, NL225A, NL228A, NL229A, NL231A, NL907A, NL917A, PL004A, PL005A, PL007A, PL008A, PL009A, PL013A, PL014A, PL015A, PL016A, PL017A, PL019A, PL021A, PL023A, PL025A, PL026A, PL028A, PL029A, PL035A, PL043A, PL044A, PL045A, PL051A, PL054A, PL055A, PL058A, PL060A, PL062A, PL100A, PL102A, PL103A, PL224A, PL225A, PL228A, PL229A, PL231A, PL907A, PL917A, PT004A, PT005A, PT007A, PT008A, PT009A, PT013A, PT014A, PT015A, PT016A, PT017A, PT019A, PT021A, PT023A, PT025A, PT026A, PT028A, PT029A, PT035A, PT043A, PT044A, PT045A, PT051A, PT054A, PT055A, PT058A, PT060A, PT062A, PT100A, PT102A, PT103A, PT224A, PT225A, PT228A, PT229A, PT231A, PT907A, PT917A, RE004A, RE005A, RE007A, RE008A, RE009A, RE013A, RE014A, RE015A, RE016A, RE017A, RE019A, RE021A, RE023A, RE025A, RE026A, RE028A, RE029A, RE035A, RE043A, RE044A, RE045A, RE051A, RE054A, RE055A, RE058A, RE060A, RE062A, RE100A, RE102A, RE103A, RE224A, RE225A, RE228A, RE229A, RE231A, RE907A, RE917A, SE004A, SE005A, SE007A, SE008A, SE009A, SE013A, SE014A, SE015A, SE016A, SE017A, SE019A, SE021A, SE023A, SE025A, SE026A, SE028A, SE029A, SE035A, SE043A, SE044A, SE045A, SE051A, SE054A, SE055A, SE058A, SE060A, SE062A, SE100A, SE102A, SE103A, SE224A, SE225A, SE228A, SE229A, SE231A, SE907A, SE917A, SI004A, SI005A, SI007A, SI008A, SI009A, SI013A, SI014A, SI015A, SI016A, SI017A, SI019A, SI021A, SI023A, SI025A, SI026A, SI028A, SI029A, SI035A, SI043A, SI044A, SI045A, SI051A, SI054A, SI055A, SI058A, SI060A, SI062A, SI100A, SI102A, SI103A, SI224A, SI225A, SI228A, SI229A, SI231A, SI907A, SI917A, SK004A, SK005A, SK007A, SK008A, SK009A, SK013A, SK014A, SK015A, SK016A, SK017A, SK019A, SK021A, SK023A, SK025A, SK026A, SK028A, SK029A, SK035A, SK043A, SK044A, SK045A, SK051A, SK054A, SK055A, SK058A, SK060A, SK062A, SK100A, SK102A, SK103A, SK224A, SK225A, SK228A, SK229A, SK231A, SK907A, SK917A, CH004A, CH005A, CH007A, CH008A, CH009A, CH013A, CH014A, CH015A, CH016A, CH017A, CH019A, CH021A, CH023A, CH025A, CH026A, CH028A, CH029A, CH035A, CH043A, CH044A, CH045A, CH051A, CH054A, CH055A, CH058A, CH060A, CH062A, CH100A, CH102A, CH103A, CH224A, CH225A, CH228A, CH229A, CH231A, CH907A, CH917A, IS004A, IS005A, IS007A, IS008A, IS009A, IS013A, IS014A, IS015A, IS016A, IS017A, IS019A, IS021A, IS023A, IS025A, IS026A, IS028A, IS029A, IS035A, IS043A, IS044A, IS045A, IS051A, IS054A, IS055A, IS058A, IS060A, IS062A, IS100A, IS102A, IS103A, IS224A, IS225A, IS228A, IS229A, IS231A, IS907A, IS917A, NO004A, NO005A, NO007A, NO008A, NO009A, NO013A, NO014A, NO015A, NO016A, NO017A, NO019A, NO021A, NO023A, NO025A, NO026A, NO028A, NO029A, NO035A, NO043A, NO044A, NO045A, NO051A, NO054A, NO055A, NO058A, NO060A, NO062A, NO100A, NO102A, NO103A, NO224A, NO225A, NO228A, NO229A, NO231A, NO907A, NO917A, SJ004A, SJ005A, SJ007A, SJ008A, SJ009A, SJ013A, SJ014A, SJ015A, SJ016A, SJ017A, SJ019A, SJ021A, SJ023A, SJ025A, SJ026A, SJ028A, SJ029A, SJ035A, SJ043A, SJ044A, SJ045A, SJ051A, SJ054A, SJ055A, SJ058A, SJ060A, SJ062A, SJ100A, SJ102A, SJ103A, SJ224A, SJ225A, SJ228A, SJ229A, SJ231A, SJ907A, SJ917A]
[Element /CD026A/ComAccRefMES21 MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 35]
[Element /CD026A/MesSeqNumMES22 MinOccurs = 0, MaxOccurs = 1] of type [nonNegativeInteger][TotalDigits = 2]
[Element /CD026A/FirAndLasTraMES23 MinOccurs = 0, MaxOccurs = 1] of type [string][Values = F, L]
[End of sequence]
[Element /CD026A/TRAPRIPC1 MinOccurs = 1, MaxOccurs = 1] of type [anyType]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Element /CD026A/TRAPRIPC1/TINPC159 MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 17]
[End of sequence]
[Element /CD026A/CUSTOFFGUARNT MinOccurs = 1, MaxOccurs = 1] of type [anyType]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Element /CD026A/CUSTOFFGUARNT/RefNumRNT1 MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 8]
[End of sequence]
[Element /CD026A/GUAREF2 MinOccurs = 1, MaxOccurs = 1] of type [anyType]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Element /CD026A/GUAREF2/GuaRefNumGRNREF21 MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 24]
[Element /CD026A/GUAREF2/ACCDOC728 MinOccurs = 0, MaxOccurs = 99] of type [anyType]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Element /CD026A/GUAREF2/ACCDOC728/AccCodCOD729 MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 4]
[End of sequence]
[Element /CD026A/GUAREF2/ACCDOCPC4 MinOccurs = 1, MaxOccurs = 1] of type [anyType]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Element /CD026A/GUAREF2/ACCDOCPC4/AccCodPC41 MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 4]
[End of sequence]
[Element /CD026A/GUAREF2/ACCCODPC3 MinOccurs = 1, MaxOccurs = 1] of type [anyType]
[Start of sequence MinOccurs = 1, MaxOccurs = 1]
[Element /CD026A/GUAREF2/ACCCODPC3/AccCodPC31 MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 4]
[End of sequence]
[End of sequence]
[End of sequence]I still thing this is a bit of an overkill, but I will use it as a last resort in order to substitute the built-in parser so I can collect all the errors of an XML source in one go.
Is there a way to obtain the same information from the XDB registry where my schemas will reside ? If yes, I will gladly substitute this Java class with whatever your suggestion is :)
If not, I intend to store the extracted information in suitably constructed database tables and use a PL/SQL procedure to do the validation by traversing the table information accordingly (XPath by XPath) collecting the errors as I traverse the XML. Hopefully, due to the XPaths being very targeted towards the information that will be checked, I will avoid the DOM memory tree overhead.
Finally, if I follow the path I described, is there a way to put some sort of trigger for the cases of copyEvolve(), inPlaceEvolve() and drop-and-reinsert so that my process will be called again for the new data ?
Apologies for the lengthy code and result set.
Best Regards
Philip
PS: I did not include the XSD file itself because it includes another four XSDs. If needed I will do it in a reply post though ...Good morning Marco,
I am back at the office today, so I am trying to catch up with everything.
If I remember though, RESOURCE_VIEW and PATH_VIEW are related to the "exploration" of the XDB registry (but I may very well be wrong !).
What I want is to retrieve schema information (if XDB actually shreds the XML schema on registration) like elements paths, simple and complex type contents, sequence information, particle occurence information, groups and group declarations etc.
I think it makes sense that Oracle stores these somewhere, since it uses the information on OR storage to generate types and tables anyway ;) That is of course if the whole OR shredding is not done totally on-the-fly...
I managed to get clearance to release partial information about some of the schemas and their related documentation, so I will be passing them to you and Mark through private emails (of course) in order to give you a clearer understanding of the whole project.
Just give me a day to write a few pages that explain how the whole operation is performed.
Best Regards
Philip -
Usually when I'm browsing through random photos, either for work or for leisure, I always middle click them to open a new tab. So again, is there a way to save images from multiple tabs without cycling through each tab, right-clicking, deleting that tab then going to the next? Help is much appreciated.
An alternative to middle clicking all the image links is just to use the [https://addons.mozilla.org/en-US/firefox/addon/201/ DownThemAll] extension with its [https://addons.mozilla.org/en-US/firefox/addon/12577/ anti-container] companion to choose the images you want to download from the original page of random photos.
-
Best way of displaying xml from a database column.
I have lots of xml stored as xmltype.
The core data is displayed in a report. If I click on a link in the report I call a popup page which should display the xml.
This xml does occasionally exceed 32K so I can't use a textarea directly.
Whats the best way to display the xml?
I was thinking of maybe a URL region but haven't used these before.
Edited by: Keith Jamieson on Dec 23, 2008 11:38 AMWhen I used htp.p I just got the description printed out.
I now have a pl/sql region as follows:
declare
v_clob clob;
BEGIN
for cur in
( SELECT xmltype.getclobval(profile_text_xml) text
from ci_profile
where profile_id='IKM'
LOOP
htp.p('--------------------------------------------------------------------------------------');
htp.plaintext(cur.text);
htp.p('--------------------------------------------------------------------------------------');
END LOOP;
END;
The problem now is that although the xml displays correctly, The bottom of the page is now not interpreted as a web page but rather as plain text.
What I really need is the start of the page to display normally,
the xml to be dispalyed as is,
and then the bottom of the page to be displayed normally again.
The bottom of my page looks like follows:
</PLAINTEXT> -------------------------------------------------------------------------------------- </td> </tr> </table><div class="t1NavigationRegion" id="R3183505456749710" ><table summary="" cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td align="left"></td></tr></table><table id="apex_layout_3183505456749710" class="formlayout" summary="" ><tr><td></td><td colspan="1" rowspan="1" align="left"><input type="hidden" name="p_arg_names" value="3184424442749715" /><input type="hidden" name="p_t02" value="" id="P0_TREE_ROOT" /><a class="eLink" title="Edit" href="javascript:popupURL('f?p=4000:371:3897603899166057::::P371_ID,FB_FLOW_ID,FB_FLOW_PAGE_ID:3184424442749715,111,4');" tabindex="999"><img src="/i/e.gif" alt="Edit" class="eLink" /></a></td></tr> </table> </div></td> <td valign="top">
</td> </tr> </table></td> </tr> </table><table width="100%" cellpadding="0" cellspacing="0" border="0" summary=""> <tr> <td><img src="/i/themes/theme_1/bot_bar_left.png" alt="" /></td> <td class="t1BotbarMiddle"><div id="t1user">ADMIN</div></td> <td class="t1BotbarMiddle"><div id="t1copy"><!-- Copyright Here --><span class="t1Customize"></span></div></td> <td><img src="/i/themes/theme_1/bot_bar_right.png" alt="" /></td> </tr> </table>
<input type="hidden" name="p_md5_checksum" value="" /></form> <script type="text/javascript"> <!-- //--> </script><!-- Code generated for user with developer privileges. --> <script type="text/javascript"> function popupInfo() { w = open("f?p=4000:34:3897603899166057:PAGE:NO:34:F4000_P34_SESSION,F4000_P34_FLOW,F4000_P34_PAGE:3897603899166057,111,4","winLov","Scrollbars=1,resizable=1,width=700,height=450"); if (w.opener == null) w.opener = self; w.focus(); } </script><table cellpadding="0" border="0" cellspacing="0" summary="Developer Toolbar" align="center"><tbody><tr><td><a class="htmldbToolbar" href="f?p=4500:1000:3897603899166057" style="border-left:1px solid black;" title="Application Express Home Page">Home</a></td><td><a class="htmldbToolbar" title="Application 111" href="f?p=4000:1:3897603899166057::NO:1,4150,RP:FB_FLOW_ID,FB_FLOW_PAGE_ID,F4000_P1_FLOW,F4000_P4150_GOTO_PAGE,F4000_P1_PAGE:111,4,111,4,4" style="border-left:1px solid #000000;border-right:1px solid #000000;">Application 111</a></td><td><a class="htmldbToolbar" title="Edit Page 4" href="f?p=4000:4150:3897603899166057::NO:1,4150:FB_FLOW_ID,FB_FLOW_PAGE_ID,F4000_P1_FLOW,F4000_P4150_GOTO_PAGE,F4000_P1_PAGE:111,4,111,4,4">Edit Page 4</a></td><td><a class="htmldbToolbar" href="f?p=4000:336:3897603899166057::::FB_FLOW_ID,FB_FLOW_PAGE_ID,F4000_P1_FLOW,F4000_P4150_GOTO_PAGE,F4000_P1_PAGE:111,4,111,4,4" style="border-left:1px solid black;" title="Create">Create</a></td><td><a class="htmldbToolbar" href="javascript:popupInfo()" style="border-left:1px solid black;" title="Session">Session</a></td><td><a class="htmldbToolbar" href="f?p=4000:14:3897603899166057::::FB_FLOW_ID,FB_FLOW_PAGE_ID,F4000_P1_FLOW,F4000_P4150_GOTO_PAGE,F4000_P1_PAGE:111,4,111,4,4" style="border-left:1px solid black;" title="Activity">Activity</a></td><td><a class="htmldbToolbar" title="Debug" style="border-left:1px solid black;" href="f?p=111:4:3897603899166057::YES">Debug</a></td><td id="hideEdit" style="display:none;"><a class="htmldbToolbar" title="Hide Edit Links" href="javascript:quickLinks('HIDE');" style="border-right:1px solid #000000;border-left:1px solid black;">Hide Edit Links</a></td><td id="showEdit"><a class="htmldbToolbar" title="Show Edit Links" href="javascript:quickLinks('SHOW');" style="border-right:1px solid #000000;border-left:1px solid #000000;">Show Edit Links</a></td></tr></tbody></table> <script type="text/javascript"> if(GetCookie('ORA_WWV_QUICK_EDIT') != null){ if(GetCookie('ORA_WWV_QUICK_EDIT') == 'SHOW') quickLinks('SHOW'); } </script> </body> </html>
Edited by: Keith Jamieson on Jan 2, 2009 2:28 PM -
Are anonymous classes reentrant and multi-thread safe?
Consider the following code. Please let me know how does this code behave wrt to reentrancy and MT. My main confusion is with the "static" keyword.
Appreciate any inputs. Thanks in advance.
public abstract class AnAbstract {
public abstract int abstractFoo();
public static AnAbstract AnAbstractImpl = new AnAbstract() {
public int abstractFoo() {
//do stuff here....
return 0;
public static void main(String [] args) {
System.out.println(AnAbstract.AnAbstractImpl.abstractFoo());
}static has nothing to do with threading.
Nor is there anything special about anonymous classes.
As implemented the class is safe.
However, given that the class is going to do more than the code that you posted the actual implementation might not be safe. -
Which List should be used, to remove in a thread safe way?
Hello all,
I plan to have a List, where n number of Threads will accessing the List.
When two or more thread trying to remove an equals items from the List, only one of the thread will remove successfully (i,e, remove(Object o) will return true). The rest of the threads will realize remove(Object o) returns false
I wish to achieve this. I know that I can achieve by using :
Collections.synchronizedList(new ArrayList(...))However, I afraid having the synchronized block will slow down my execution speed. Is there other way, that I achieve the same objective with faster speed? For example, using CopyOnWriteArrayList?
Thanks!Sorry,
I said "badly" because it is synchornized by putting "synchronized" keyword on most of the methods prototypes.
Which equals to synchronizing on "this".
In my opinion, one problem of this implementation is that 2 calls to a get() method will be synchronized wherever they dont need to. (As get() does not modify the vector). [See Edit]
One other is you can synchronize on the Vector's mutex (itself) outside of the Vector's code.
And at last, as synchronizedList is not implemented by a Vector and is more recent than the Vector implementation...
I guess they implemented it in another way for many good reasons...
[Edit]
As i can see in Collections, the synchronizedList is implemented in the same way.
BUT, as the synchronized keyword is not in the method's prototype, we can expect the implementation to be changed a day...
And vector is a kind of old object kept for backward compatibility i guess. (someone can confirm ?). ("As of the Java 2 platform v1.2, this class has been retrofitted to implement List, so that it becomes a part of Java's collection framework.")
@KwangHooi
You can write your own implementation of a List which will not synchronize on the same token for both read/write operations. (but, i guess it could be hard to avoid deadlocks) -
Is there an easy and safe way to install Flash Player?
I am getting this notice trying to down load from the updater on Windows 7 Home Premiu.
"Installation encountered errors
Actionlist not found"
Do I need to hire someone to download Adobe Flash, because I am not good at this.
thanksDownload and run the offline installers from http://helpx.adobe.com/flash-player/kb/installation-problems-flash-player-windows.html#mai n-pars_header (under the heading Progress bar hangs...).
-
Is there a multi-authoring solution with RH Server apart from RH client?
Greetings:
Is Adobe looking to price itself out of the HAT market?
Just got the pricing on RH Server 8 ($2000) and then another $1000 per RH 8 client (as I write this I am still verifying the pricing, because they first told me each user will need a full RH Server 8 license, meaning $10K for 5 authors). For five authors, that's $7000 (unless its $10,000 ;-), and about 99% overkill on the multi-authoring side, since we only need one RH 8 client for management and publishing, and a simple WYSIWYG for additional authors is all that is needed, and indeed the learning curve for RH versus a WYSIWYG makes this paying a lot of money for a huge training burden & support headache. Is this for real?
I'm researching HAT's and I've got the same or better featured server/multi-author scenario going with HelpServer for $4000 (unlimited additional authors), Doc-To-Help Enterprise for a mere $1500 (also unlimited authors), and Flare complete with Feedback Server and 5 X-Edit author/users for less than $3500, not including support packages. Considering the fact that there is virtually nothing RH does the others don't, and quite a bit the others do that RH does not, I have to wonder -- why is there no simple to learn, inexpensive to buy WYSIWYG (something like Contribute) for multi-authoring in RH Server?
Since it's all HTML, we could in fact go with Contribute, but direct changes would not be reflected back in the RH client files. That's about the only thing that would have to be automated beyond a Contribute-like WYSIWYG, or what am I missing?
Just occurred to me, could have Contribute users make changes to RH shared directory, then they could be published from there. Hmmmn.
Anyone have a workaround or other solution here?
Shame, shame, Adobe.
regards,
Steven
"I am but an egg."
--Stranger in a Strange LandHi Steven
Dems the breaks I suppose. One way past it would be to have one RoboHelp Server license and one RoboHelp Office license. Then have the other authors simply use Microsoft Word to maintain their content. The person that uses the RoboHelp Office (Client part) could then import and link the Word documents managed by the other authors. If you worked that way you would only be looking at a total outlay of $3,000 instead of $7,000. But I suspect that you might get a better deal than $7,000 if you worked with Sales.
Keep in mind that RoboHelp Server relies upon the content created by RoboHelp. There is no "limited WYSIWYG editor". All it does is provide reporting as well as project merging. There is nothing about it that lends itself to a simple WYSIWYG editor that provides a window into the server content.
I cannot speak to the other tools you cited. Maybe they do work in that manner and maybe they don't. And maybe you are misunderstanding the actual capabilities. I cannot say.
Additionally, it's helpful to keep in mind that the way RoboHelp works today was initially designed and maintained by the folks now known as MadCap. Because of that, I'd be surprised to find that the MadCap products operate in a totally different manner. Maybe they do. Adobe acquired the product by virtue of acquiring macromedia. So they didn't design the way it works. Although they have enhanced it. I see no reason to shame Adobe.
Can you expound on your claim that " there is virtually nothing RH does the others don't, and quite a bit the others do that RH does not". What ios the "quite a bit" that others are doing that RoboHelp isn't? RoboHelp seems fairly competitive with its feature set to me.
Cheers... Rick
Helpful and Handy Links
RoboHelp Wish Form/Bug Reporting Form
Begin learning RoboHelp HTML 7 or 8 within the day - $24.95!
Adobe Certified RoboHelp HTML Training
SorcerStone Blog
RoboHelp eBooks -
Is there a way to retrieve information from a damaged computer?
My 2009 MacBook Pro froze last night and when I went to restart it, was apparently damaged and now won't work. It is stuck on a grey loading screen with the Apple logo and turns off after about a minute of that. I have tried safe-rebooting, rebooting, everything I could find on it. I don't know whether it can actually be fixed or not, but my question is: if I bring it to a professional at Apple or someone along those lines, is there a way I can get the information with my files, photos, documents - stuff like that - onto my eventual new computer? Thanks in advance.
SabrineOceana,
to supplement OGELTHORPE’s suggestion, another possibility (if you have access to a FireWire cable and a second Mac with a FireWire port) would be to boot your MacBook Pro into Target Disk mode, to have it be treated as an external disk by the second MacBook Pro. You could try copying your personal files from your MacBook Pro to the second Mac in that way. You might also be able to run Disk Utility on the second Mac against your MacBook Pro’s internal disk, to see if the Repair Disk button woudl be available that way. -
no matter what website, every time I move the mouse pointer over something to click on a line of black printing in a thin white box pops up at the bottom of the screen and shows me the http address of the item I'm about to click on. I want to shut this function off or remove it if possible. I find that the previous version did not do this, it seems to be unique to 6.0. It's VERY distracting and ANNOYING. How can I make it go away????
When you hover the mouse cursor over any link, it will display the link details at the bottom left of the screen; black font on white background.
This display can be very important as it shows the full address of the hyperlink. This can be particulary useful for checking on whether the link is bona-fida. For example; if you receive an email that looks like it is from a bank , hovering over the link will indicate instantly that the link is pretending to be something it isn't.
Another example that can be useful; a website link may say 'contact me' rather than give the actual email address. However, when you hover over the link, the actual email address will be displayed at the bottom of the screen. If you click on the link then Outlook usually opens, however I do not use Outlook, so displaying the email address is useful.
This display is something that has always been present and it is also displayed if you use IE.
However, I can see that this annoys you, so you could try the following:
[[https://addons.mozilla.org/en-US/firefox/addon/link-location-bar/?src=api]]
After installing the addon, you will need to restart Firefox, then go to History and Restore previous session to get all your tabs and webpages back.
You will now find that when you hover over any link, it will now display in your address bar on the right hand side.
If this helps, please say this question has been solved. -
Safe way to 'bin' images from my hard drive
I've found that 193GB of images stored in my hard drive needs to be removed for good (these images are on my separate hard drive), my question is how do I now safely remove these images from my hard drive? - and where are they?
Thanks
Message was edited by: welshgoldwelshgold wrote:
and where are they?
On your hard drive I would presume... If you mean you don't know where on the hard drive, then I would suggest making a smart folder for your hard drive that only includes images. Then drag the files in this folder to the trash. Then, with the hard drive still connected, empty the trash. If you want these to never be recovered again, choose the finder option in the menu bar and choose secure empty trash.
193GB is a lot of data. It will take a good while to create the smart folder and even longer to secure empty trash. A standard empty shouldn't take to long.
Regards
Maybe you are looking for
-
i have LR from 2 through 4.4, I am simply trying to adjust CR2s, and convert the them JPEG. LR says my Perfectly Clear is expired but my update is up to date and all paid for. What is Perfectly Clear and how do i get this puppy to be part of the t
-
Dear All, I have DaNI robot 2 and I am trying to make the robot read a text file which contains the velocity profile. When I use the labview to read the text file there is no problem and I can read the values easily. The problem is that the robot can
-
K1: apps are forced close + can't connect to internet + can't factory reset
All of a sudden, my ideapad K1 keep poping up messages saying that **** has stopped unexpectedly and force close. I try to upgrade the fireware while realize there is no wifi connect (the wifi works well on my other devices). After trying tons of me
-
Hi All, I got a requirement to create a new mapping for Customer master data, few mappings are already existing in the system but as per my senior they are not sufficient to upload the full data into Data manager ...so I need to create a new Map. Cou
-
Im just wondering if anyone here has had no problems with thier zen micro? (other than the battery issue which everyone has). Because i've had my zen micro 4 months not had one problem and its my first one. So anyone else have no problems? Just Wonde