Object/Instance finalization
The Object is the superclass of all classes in Java.
So if i want to finalize a object i can call
super.finalize();In a situation like below, how can i finalize object or instance,always get
mixed up with that,
public class Foo{
public void FooMethod(){
Foo2 f2 = new Foo2(); //some other class
//Is it possible to finalize f2 in here?
}My problem is is it possible to finalize f2 inside FooMethod? If yes,
how can that be achieved.
The reason i want to do it is, i have a db access from my java application.
Since its multithreaded and since all of it access database, i want
to finalize the database access as soon as it is done with db access.
Using static class variable is out because of specification and
having one access for thread is out too because of specification.
//Is it possible to finalize f2 in here?Usually not, because f2.finalize() is protected unless overridden.
The reason i want to do it is, i have a db access
from my java application.
Since its multithreaded and since all of it access
database, i want
to finalize the database access as soon as it is done
with db access.Why do you want to do that?
You should just do what everybody else does and use a connection pool, and let the connection pool decide when/whether it wants to release connections.
Similar Messages
-
Object instance 1200 does not exist (while executing task SWUS)
hello all,
i have created a workflow class and two methods (constructor, display) and 1 attribute PLANT (instance,public) in it.
i am using this class and display method in task t code PFTC.
While executing this task from SWUS , i am getting this error.Object instance 1000 does not exist.
As i was going through this blog. i have created everything exactly just like it is mentioned there.
But still i am getting this error. please guide me to detect where i am mistaken.
http://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-tasks
this is class screen-shot and error i am facing while executing the task.
The methods which are implemented using the interface are emtpy(don't contain any source code lines).sorry i forgot to mention that input value 1000 does exist in our system.
i have also tried F4 help. it is showing all existing plants in our system, but still it is not accepting values select from f4 help.
Also to add information,
I have executed class using F8 option in class builder, and it is working perfect.
source code of display method.(i am trying to view plant in display method just like in blog).
method DISPLAY.
break-point.
data: ls_vt001w type v_t001w.
CLEAR ls_vT001W.
ls_VT001W-MANDT = SY-MANDT.
ls_VT001W-WERKS = me->PLANT.
CALL FUNCTION 'VIEW_MAINTENANCE_SINGLE_ENTRY'
EXPORTING
ACTION = 'SHOW'
VIEW_NAME = 'V_T001W'
CHANGING
ENTRY = ls_vT001W.
endmethod. -
How to invoke BPM object instance variable from interactive activity?
I have a screenflow with an automatic activity "A" followed by an interactive activity "B". "B" calls a BPM object "X" and uses a JSP presentation to show its attributes. Is there a way to use another BPM object, say type "Y", create an instance variable of that type inside "A", and get its attributes values from the JSP page associated to "B"?
Edited by: user6473912 on 20/07/2010 03:37 PMTry this. It assumes you have:
<li> a user named "auto"
<li> a project variable named "customerType"
<li> an instance variable named "orderAmount" that is a decimal
<li> an instance variable named "order" that is a BPM Object that has attributes named "customerName" and "amount"
ps as ProcessService
xmlObject as Fuego.Xml.XMLObject
do
connectTo ps
using url = Fuego.Server.directoryURL,
user = "auto",
password = "auto"
instF as InstanceFilter
create(instF, processService : ps)
addAttributeTo(instF, variable : "customerType", comparator : IS, value : "Gold")
instF.searchScope = SearchScope(participantScope : ParticipantScope.ALL, statusScope : StatusScope.ONLY_INPROCESS)
for each inst in getInstancesByFilter(ps, filter : instF) do
// here's how to get the value inside a primitive instance variable
orderAmtObj as Object = getVar(inst, var : "orderAmount")
// here's how to get the value of attributes inside a complex BPM Object instance variable
// - in this case this is an "order" object with two attributes (customerName and amount)
orderObj as Object = (getVar(inst, var : "order"))
xmlObject = Fuego.Xml.XMLObject(createXmlTextFor(DynamicXml, object : orderObj, topLevelTag : "xsi"))
logMessage "The value of the order object's customer name is: " +
selectString(xmlObject, xpath : "customerName")
logMessage "The value of the order object's order amount is: " +
selectNumber(xmlObject, xpath : "amount")
// here's a rather uninspired way to retrieve who the participant is that was assigned the instance
logMessage "The participant assigned to this instance is: " + inst.participantId
end
on exit
disconnectFrom ps
endDan -
OIM - Task Assignment Adapter - How to get the object instance key?
Hello experts,
I'm trying to use a task assignment adapter to assign an approval task dynamically. Basically, the user can request a resource like "CustomApp Profiles" and we create an object form to let them choose the profile that he needs. Each profile has an owner, which is populate in a Lookup (Owner is the code and Profile is the decode).
So, in the approval task, I need to get the profile selected by user in the object form and search into the lookup who is the owner of that profile. But I don't know how can I get the object instance key using the parameters that can be mapped to a task assignment adapter.
Looking into the OIM documents, I believe that the easier way is using the request key, because the REQ_KEY is a foreign key in OBI table.
Did anyone knows how can I get the object instance key using the request key? Can I use some API or should I execute a SQL statement directly in OIM database?
Best Regards,
NittoTo retry a task that is in a rejected state, you use the SCH_KEY which is the task key. In OIM, all rejected tasks are listed in the OTI table. It contains all the important information about a rejected or pending task.
You can use the APIs found in the tcProvisioningOperationsIntf class to retrieve open tasks.
-Kevin -
How can i have a refrence of a java class object instance in my c++ project
Hi!
How can i have a refrence of a java class object instance in my c++ project. Is there a way?hahaxia wrote:
The second question is the big one. The first question is half of the problem of "c++ to java" invocation and access. But the other half which is "java to c++ " invocation and access is still not solved. jni only provide the "java to c++ " DLL invocation Wrong,
Using JNI your java classes can have methods implemented in C/C++.
Using JNI you can call java classes.
There is no other possible interaction between C++ and java, so it does it all. -
Archiving historical object instances
Post Author: KevinR
CA Forum: Administration
Is there an automated way to archive historical object instances? We are a financial institution and need to keep objects for several years, but don't want to keep so many objects available in WebI because we'll run out of room on our file server. We only want to keep a years worth available to the users. After a year, the instances will fall off based on our parameters, but he have to keep them (most likely on tape backups) available just in case we get audited.Thanks for the reply.
We have around 900 tables in DB to Archive ....In both the options I have to have Date column in every table ....But when I checked that ....most of the tables does not have any date field on which I create a date range parition OR Pull the data to Archive tables.
I think it is a expected DB ..as it is not necessary every table has data column.
What should be the another approach in this condition?
Another quesiton will be...if applicaiton wants the see the historic data, how that be possible.
Edited by: user489466 on Apr 10, 2009 4:26 AM
Edited by: user489466 on Apr 10, 2009 4:27 AM -
Create an object instance without calling its constructor?
Hi,
Sometimes it's useful to create object instances without calling their constructor. When? For example object deserialization.
By default when deserializating an object, the instance in the VM is created by calling the default constructor of the first non Serializable super-class (if you don't have such you're in trouble). I think that the db4o object database don't even call any constructor you may have written.
So such thing exists, but how is this possible? I fugured out that sun's deserialization mechanism first finds the constructor of the first non Serializable super-class and then:
cons = reflFactory.newConstructorForSerialization(cl, cons); Here I'm stuck.
Here's the source of the method for finding serializable constructor:
* Returns subclass-accessible no-arg constructor of first non-serializable
* superclass, or null if none found. Access checks are disabled on the
* returned constructor (if any).
private static Constructor getSerializableConstructor(Class cl) {
Class initCl = cl;
while (Serializable.class.isAssignableFrom(initCl)) {
if ((initCl = initCl.getSuperclass()) == null) {
return null;
try {
Constructor cons = initCl.getDeclaredConstructor(new Class[0]);
int mods = cons.getModifiers();
if ((mods & Modifier.PRIVATE) != 0 ||
((mods & (Modifier.PUBLIC | Modifier.PROTECTED)) == 0 &&
!packageEquals(cl, initCl)))
return null;
cons = reflFactory.newConstructorForSerialization(cl, cons);
cons.setAccessible(true);
return cons;
} catch (NoSuchMethodException ex) {
return null;
}So any info about this ReflectionFactory, and the problem as a whole?
Thanks.So the question is how to create object instance without initializing it (calling the constructor)? And if you have any info about ReflectionFactory it will be useful too.
When serializing an object you save all its fields and some extra info. When you deserialize it you have to reconstruct it, by copying the fields back, but not to reinitialize.
import java.lang.reflect.*;
import java.io.Serializable;
import java.security.AccessController;
import sun.reflect.ReflectionFactory;
public class Test0 implements Serializable {
public Test0() {
System.out.println("Test0");
public static void main(String[] args) throws Exception {
Constructor<Test0> constr = reflectionFactory.newConstructorForSerialization(Test0.class, Object.class.getConstructor(new Class[0]));
System.out.println(constr.newInstance(new Object[0]).getClass());
private static final ReflectionFactory reflectionFactory = (ReflectionFactory)
AccessController.doPrivileged(
new ReflectionFactory.GetReflectionFactoryAction());
}When you execute this piece you get:
class Test0 -
Create SOFM object instance from PDF
Hi All,
I am using 4.6 version of SAP where FM 'sap_wapi_attachment_add' is does not exit. My query is to create an attachment (SMARTFORM coverted in PDF) in ABAP progam which i have to send as attachment with a Decision Task in the workflow.
I am able to send attachment with mail but to send attachment with decision task i need to create an instance of SOFM object. Please suggest an alternative method to do so instead of FM 'sap_wapi_attachment_add' .Hi Taran,
I had put my code in workflow task. You can find the task method code below:
*Data declaration
DATA: GITAB TYPE SOLIX_TAB,
GSTAB LIKE LINE OF GITAB,
SOFM_KEY TYPE SOFMK,
GIT_LINES TYPE SOLI_TAB.
DATA: LREF_DOCUMENT_BCS TYPE REF TO CL_DOCUMENT_BCS,
LREF_IM_DOCUMENT TYPE REF TO IF_DOCUMENT_BCS.
Generate Smartform*
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = C_FORM
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
FM_NAME = GV_FM
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
EXPORTING
I_LANGUAGE = SY-LANGU
* I_APPLICATION = 'SAPDEFAULT'
IMPORTING
E_DEVTYPE = GV_OUTPUT_OPTIONS-TDPRINTER
EXCEPTIONS
NO_LANGUAGE = 1
LANGUAGE_NOT_INSTALLED = 2
NO_DEVTYPE_FOUND = 3
SYSTEM_ERROR = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
GV_OUTPUT_OPTIONS-TDNOPREV = 'X'.
GV_CONTROL_PARAMETERS-GETOTF = 'X'.
GV_CONTROL_PARAMETERS-NO_DIALOG = 'X'.
CALL FUNCTION GV_FM
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = GV_CONTROL_PARAMETERS
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = GV_OUTPUT_OPTIONS
USER_SETTINGS = 'X'
GV_ENAME = GV_ENAME
GV_PERNR = GV_PERNR
GV_PERSK = GV_PERSK
GV_ZZ_LEVEL = GV_ZZ_LEVEL
GV_BTRTX = GV_BTRTX
GV_GBDAT = GV_GBDAT
GV_JOIN_DATE = GV_JOIN_DATE
GV_RESIN_DATE = GV_RESIN_DATE
IMPORTING
DOCUMENT_OUTPUT_INFO = GV_DOCUMENT_OUTPUT_INFO
JOB_OUTPUT_INFO = GV_JOB_OUTPUT_INFO
JOB_OUTPUT_OPTIONS = GV_JOB_OUTPUT_OPTIONS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
* EXPORTING
* USE_OTF_MC_CMD = 'X'
* ARCHIVE_INDEX =
IMPORTING
BIN_FILESIZE = GV_BIN_FILESIZE
TABLES
OTF = GV_JOB_OUTPUT_INFO-OTFDATA
DOCTAB_ARCHIVE = GIT_DOCS
LINES = GIT_LINES_TEMP
EXCEPTIONS
ERR_CONV_NOT_POSSIBLE = 1
ERR_OTF_MC_NOENDMARKER = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
TABLES
CONTENT_IN = GIT_LINES_TEMP
CONTENT_OUT = GIT_LINES.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'SO_SOLITAB_TO_SOLIXTAB'
EXPORTING
IP_SOLITAB = GIT_LINES "GIT_LINES_TEMP1
IMPORTING
EP_SOLIXTAB = GITAB.
*Create SOFM object from smartform PDF
IF NOT GITAB IS INITIAL.
TRY.
CALL METHOD CL_DOCUMENT_BCS=>CREATE_DOCUMENT
EXPORTING
I_TYPE = 'BIN'
I_SUBJECT = 'NOTICE PAY WAIVER FORM'
* I_LENGTH =
* I_LANGUAGE = SPACE
* I_IMPORTANCE =
* I_SENSITIVITY =
* I_TEXT =
I_HEX = GITAB
* I_HEADER =
* I_SENDER =
RECEIVING
RESULT = LREF_DOCUMENT_BCS.
CATCH CX_DOCUMENT_BCS .
ENDTRY.
LREF_IM_DOCUMENT = LREF_DOCUMENT_BCS.
TRY.
CALL METHOD LREF_DOCUMENT_BCS->ADD_DOCUMENT_AS_ATTACHMENT
EXPORTING
IM_DOCUMENT = LREF_IM_DOCUMENT.
CATCH CX_DOCUMENT_BCS .
ENDTRY.
TRY.
CALL METHOD LREF_DOCUMENT_BCS->GET_DOCTP
RECEIVING
RESULT = SOFM_KEY-DOCTP.
CATCH CX_OS_OBJECT_NOT_FOUND .
ENDTRY.
TRY.
CALL METHOD LREF_DOCUMENT_BCS->GET_DOCYR
RECEIVING
RESULT = SOFM_KEY-DOCYR.
CATCH CX_OS_OBJECT_NOT_FOUND .
ENDTRY.
TRY.
CALL METHOD LREF_DOCUMENT_BCS->GET_DOCNO
RECEIVING
RESULT = SOFM_KEY-DOCNO.
CATCH CX_OS_OBJECT_NOT_FOUND .
ENDTRY.
SWC_CREATE_OBJECT NOTICE_PAY_WAIVER_FORM 'SOFM' SOFM_KEY.
SWC_SET_ELEMENT CONTAINER 'NOTICE_PAY_WAIVER_FORM'
NOTICE_PAY_WAIVER_FORM.
ENDIF.
The object instance thus created will be visible along with other object instances in the workitem display. Provide this object in binding of decision step as you provise any other obect instance and not as ATTACH_OBJECT
Regards,
Neha -
Static Classes/Methods vs Objects/Instance Classes/Methods?
Hi,
I am reading "Official ABAP Programming Guidelines" book. And I saw the rule:
Rule 5.3: Do Not Use Static Classes
Preferably use objects instead of static classes. If you don't want to have a multiple instantiation, you can use singletons.
I needed to create a global class and some methods under that. And there is no any object-oriented design idea exists. Instead of creating a function group/modules, I have decided to create a global class (even is a abstract class) and some static methods.So I directly use these static methods by using zcl_class=>method().
But the rule above says "Don't use static classes/methods, always use instance methods if even there is no object-oriented design".
The book listed several reasons, one for example
1-) Static classes are implicitly loaded first time they are used, and the corresponding static constructor -of available- is executed. They remain in the memory as long as the current internal session exists. Therefore, if you use static classes, you cannot actually control the time of initialization and have no option to release the memory.
So if I use a static class/method in a subroutine, it will be loaded into memory and it will stay in the memory till I close the program.
But if I use instance class/method, I can CREATE OBJECT lo_object TYPE REF TO zcl_class then use method lo_object->method(), then I can FREE lo_object to delete from the memory. Is my understanding correct?
Any idea? What do you prefer Static Class OR Object/Instance Class?
Thanks in advance.
Tuncay@Naimesh Patel
So you recommend to use instance class/methods even though method logic is just self-executable. Right?
<h3>Example:</h3>
<h4>Instance option</h4>
CLASS zcl_class DEFINITION.
METHODS add_1 IMPORTING i_input type i EXPORTING e_output type i.
METHODS subtract_1 IMPORTING i_input type i EXPORTING e_output type i.
ENDCLASS
CLASS zcl_class IMPLEMENTATION.
METHOD add_1.
e_output = i_input + 1.
ENDMETHOD.
METHOD subtract_1.
e_output = i_input - 1.
ENDMETHOD.
ENDCLASS
CREATE OBJECT lo_object.
lo_object->add_1(
exporting i_input = 1
importing e_output = lv_output ).
lo_object->subtract_1(
exporting i_input = 2
importing e_output = lv_output2 ).
<h4>Static option</h4>
CLASS zcl_class DEFINITION.
CLASS-METHODS add_1 IMPORTING i_input type i EXPORTING e_output type i.
CLASS-METHODS subtract_1 IMPORTING i_input type i EXPORTING e_output type i.
ENDCLASS
CLASS zcl_class IMPLEMENTATION.
METHOD add_1.
e_output = i_input + 1.
ENDMETHOD.
METHOD subtract_1.
e_output = i_input - 1.
ENDMETHOD.
ENDCLASS
CREATE OBJECT lo_object.
lo_object->add_1(
zcl_class=>add_1(
exporting i_input = 1
importing e_output = lv_output ).
lo_object->subtract_1(
zcl_class=>subtract_1(
exporting i_input = 2
importing e_output = lv_output2 ).
So which option is best? Pros and Cons? -
"OIP-04796 Unable to create object instance"
I am using OO4O, version 3 for Oracle 8.1.7 on Windows with Visual Basic version 6.
I am getting the intermittent errors "OIP-04796 Unable to create object instance" and also "Method createDynaset of _IOraDatabase failed" - I think both are related to one another and from the documentation for OO4O, "OIP-04796" relates to the client side object cache of the OraDatabase class. Reasoning that the client side object cache was too small I attempted to increase the relevant properties of the OraDatabase object using the following: -
MyOraDatabaseObj.CacheOptimalSize = 400
However, at run-time, this property of the OraDatabase object does not get set accordingly in the VB IDE and after several attempts I can't seem to set it. I have also tried setting the CacheMaximumSize property but to no avail.
Can anybody indicate to me where I am going wrong and either with the setting of the above properties or with the error message in general if I am not on the right track with the cache properties. I don't suspect that it is my code because the problem "seems" to be intermittent.
Any and all help would be greatly appreciated. If more info is required then just ask as this is pressing problem.
TYIA
Mark GrimshawI am pretty sure the patches are available here. If you didn't explicitly install one then you have whatever the base release was.
If they are not available here (I almost never look here first for a patch) they are certainly available in the MetaLink file library for OO4O. -
Error when determining attribute 'OBJECTTOAPPROVE' of object instance
Hi,
I'm using Item-based level approval shopping cart. I've written code in BADI for approval level as per our requirement. When I create shopping cart, it is triggering workflow and going to particular user, but when I saw the step history for the approval activity it shows, Error when determining attribute 'OBJECTTOAPPROVE' of object instance BO.BUS30003.
And when I execute the workitem, the status changes to error state and it has one more message in step history which is Work item 000000006030: Object FORM method HTMLPROCESS cannot be executed.
Any one knows about this errors ?
Regards,
JMBHi..
In simulating the workflow is it working.
Regards,
Surjith -
Workflow N-Step value .Object instance BUS4101 message when released
Hi Everybody,
Onw customer running BBPCRM40 SP 8
We are using N-Step Approval over value Limit of Shopping Cart WS14000109
When a shopping cart is released, another message appear in inbox about,
Object instance BUS4101, with several message about field values doesn't exist.
I have seen several notes like 905409 but it doesn't apply for my version level,
Does anybody know why this message appear and how I can omit it?
Thanks
Best regardsThe message translated would be Work item <WORKITEM.WORKITEMSHORTTEXT not found>" (identif. <WORKITEM.WORKITEMID not found> type <WORKITEM.WORKITEMTYPE not found> in status <WORKITEM.WORKITEMSTATUS not found>.
Make a correction action for workflow <WORKITEM.WORKITEMREFERENCE not found> might be updated.
I hope this help
Regards -
Creating dynamic object instance names
If I have a class such as ...
class NewDevice
I would create a new instance of that object by calling 'NewDevice' as ....
NewDevice nd = new NewDevice();
Suppose I don't actually know how many device I need before I read a file in and then subsequently create a new object instance. I could have a long list of variable name i.e. nd1, nd2, nd3 etc but that would be messy and I would be sure to run out.
My Question..........
How do I create object instances with unique names 'on-the-fly' so to speak
ThanksHere's an example that allows you to build up a list of NewDevice instances, see how many there are and get them back by their index in the list:
public class MyClass
List newDeviceList;
public MyClass()
newDeviceList = new ArrayList();
public void addNewDevice(NewDevice newDevice)
newDeviceList.add(newDevice);
public int getNewDeviceCount()
return newDeviceList.size();
public NewDevice getNewDevice(int idx)
return (NewDevice)newDeviceList.get(idx);
}Hope this helps. -
How to remove all scripts on object instances?
I'm looking for any kind of solution here, besides disabling the warning.
I hate it when I'm converting someone else's AS2 project to AS3, and there's code buried on an onstage instance somewhere, which gives me the warning:
"Actions on button or MovieClip instances are not supported in ActionScript 3.0. All scripts on object instances will be ignored."
How can I:
A) Find which instances have code on them.
or
B) Remove all code on all instances.
Idea:
Can I save as a different format/version/something and lose this data somehow. Then I could convert it back its current FLA format?YES!!! So awesome!! Thanks
-
Do we have any native methods to get object instances which are alive ?
Do we have any native methods to get object instances which are alive ?
Help appreciated.If you are looking for accessing objects that are eligible for GC but are not GC,than it should be very difficult.As Java does not give you memory access to its variables.
Maybe you are looking for
-
My daughter got locked out of her ipod touch 4th generation. It now says ipod disabled, connect to itunes. I have plugged it into my computer and to I tunes and It doesn't connect to either. I have plugged in my sons ipod using the same cord and h
-
Free goods condition is not deleted when pricing date changes
Hi experts, we want to use the free goods condition type 'NA00' / 'NRAB' with category '3' (inclusive rebate). The condition records are valid a certain period ( 1 month e.g.). The system inserts the condtion 'NRAB' in the calculation scheme and cal
-
Replacement for ipop broken display
replacement for ipop broken display
-
Parallel printer to iMac or Time Capsule
We just traded in an old PC for a new iMac running Lion. We still have an old HP laserjet 4L that has been a trouble free workhorse, and would like to keep it if possible. It only has one output, a standard parallel printer cable. Is there a way t
-
Detect device where pdf is being viewed using adobe javascript
How can I detect whether a PDF file is being viewed in a Mobile device or PC? Is it possible through Adobe JavaScript API or something else?