Complicated structure for DLL function
I need LV6 to pass and get back parameters to a DLL function whose prototype is:
int APIENTRY GetData(ACQDATA *Data)
ACQDATA has the following structure
typedef struct{
unsigned long huge *s0;
unsigned long far *region;
unsigned char far *comment0;
double far *cnt;
HANDLE hs0;
HANDLE hrg;
HANDLE hcm;
HANDLE hct;
}ACQDATA;
From the DLL documentation I could see that
- the function modifies its argument
- the (fixed) length of the second, third and fourth parameter is specified
No idea of the length of "s0". I've tried several LV clusters including a cluster with four pre-allocated arrays (buffers) and four scalars. But no luck so far.
If a C wrapper function is the only solution to pass the parameters correct
ly, can anyone show me an example. Can I use the Code Interface Node for that purpose though I only own the Base Package version of LV or shall I write another DLL function?
Please help asap
Unfortunately I am new to C programming, but I'll try to give you the complete picture of what happens.
There's no definition for HANDLE in the DLL documentation but windows.h is included, so I guess the following
#define HANDLE void * //32bit?
In my LV routine I tried U32 variables for the HANDLE typed parameters.
In one of attempt LV passes to the function a cluster (I make no mistake with the order!) with four arrays and four U32, all of them preset to some value. Well.. these values (all)are not changed when the function returns. The return value of the function says no error, anyway.
I tried other clusters: with and without arrays, with all (or part) scalars and all (or part) strings. No way either.
Sometimes LV itself crashes, sometimes I get
the original values I imposed before the call.
I suspect the LV cluster structure makes me miss the right level of indirection for the first 4 variables in the structure (called *s0, *region, *comment and *cnt): when either I pass arrays or scalars as components of the cluster.
Hope this helps you to help me
Cheers
Piero
Similar Messages
-
Creating a Structure for BAPI Function Module
Hi,
I need to create an RFC for a BAPI call. For that I have to create a structure for the function module. Now, do I need to specify both import and export parameters in the same structure or do I need to create two different structures for Import as well as export parameters? If the import and export parameters are specified aleady, Do I need to supply this structures again under "TABLES"?
Thanks,
John.if u have/get more one records , then u have to use tables ?
Regards
Prabhu -
Type librarys for DLL functions that TestStand understands for parameter information
Using the C/C++ DLL call adapter I would like to specify a call to a DLL function and have TestStand (3) understand the parameter information.
Usually it says 'there is no parameter information available'. Today however I tried building a DLL in Visual C++ instead of CVI and got a bit further. TestStand recognized that there WAS parameter type information but then said 'The type library for this DLL does not contain enough information to determine whether this function parameter is a pointer to a single item, or an array of items."
So in a nutshell, does anyone know what options (in CVI or MSVC) I need to build with so that TestStand recognizes the function prototypes exported in the DLL? After all it's alot of work to type in all that parameter information.
Many thanks,
Ronnie
TestStand 4.2.1, LabVIEW 2009, LabWindows/CVI 2009In CVI, you can get the parameter information into a DLL. First of all, you have to have a function panel (.fp) file with all of your exported functions defined as function panels. From this function panel file you can also generate a windows help file to document your DLL. Once you have the .fp file and .hlp file, you can enable references to them in the build target settings (Build->Target Settings...). Select "Type Library..." and check "Add type library resource to DLL" and "include links to help file" then browse to your .fp file. If there are descepencies between the functions defined in your .fp file and the actual functions you have exported in the DLL, then you may get a compiler error.
--Peter -
Different performanc​e for handling DLL function
Hi, all
I have some question about handling DLL function.
There is two test cases for the DLL handling for experiment.
Platform is as following:
Windows 98, LabWindows/CVI 5.5 (compatiable with Virsual C++), DLL library (built by C++ Builder 960 kbytes).
Case 1:
Use the LoadLibrary to load the DLL library (DLL_handle) and use the function (provided by DLL) to handle the COM port (COM_handle). And there have a hardware key for security check. For each command (provided by DLL) take 0.25 second to finish one command to handle the RS232.
Case 2:
Use LoadLibrary to load the DLL library (DLL_handle) and use the function (provided by DLL) to handle the COM port (COM_handle). And there
have a hardware key for security check. There have three threads working (use CreateThread to create with 1MB stack size), and pass the DLL_handle and COM_handle to the static libarty to do the desired job (took 1 second to finish the job for one command). In the static library, there use the DLL_handle to get the pointer of the selected function and use COM_handle to handle the RS232.
I don't know the reasons between these two cases.
If you have any suggestion or solution about it , please tell me detail.
Thanks,
Lambert Lin
My email address is [email protected]Sir,
We do not have an exact idea of what your application is doing. However, it looks like the difference between the two cases is the use of multithreading in the second. It is possible that the delay is from the CPU having to "switch" between threads, and having to load and execute calls to the DLL once in the thread. I think you should look carefully into the structure of your applications multithreading to see if there are areas which could be causing delays in the execution of the DLL's functions. -
How to create a info structure for product allocation functionality
Hi Experts,
how to create a info structure for product allocation functionality
For allocating fixed quantities to the specified customers at sales order
Especially i need help in selecting the key figures and key charecterstics for at mc21 and mc24 t.codes(source feilds)
plase provide product allocation functionality with screenhots
thanks in advance
rp
Edited by: rajendraprasad vasam on May 21, 2008 2:19 PM
Edited by: rajendraprasad vasam on May 21, 2008 2:19 PM
Edited by: rajendraprasad vasam on May 21, 2008 2:20 PMHello,
please have a look at the infostructure S140 in transaction MC23 and MC26.
this is the standard infostructure for product allocation.
I hope that the information are helpful.
Regards
Claudia -
Change structure for list editing of functional location
What is the significance of change structure for list editing (t code il04) of functional location?
just enter the functional locations you need to create and descriptions and save
-
Wrapper for invoking external DLL-function
I want to run a Host-Command (e.g. rwrun60 report=xyz.rdf batch=yes) invoked by a trigger that fires when a new record is inserted.
I wrote a DLL which has an exported function that accepts a commandline (with parameters) and invokes the command via ShellExecute.
The problem is, that when i invoke the PL/SQL-wrapper, the DLL-function is properly run, but the program i want to run is only visible in the taskmanager(NT) and does nothing.
So what i need is a correct wrapper for the function:
DLL-function: OExecSysCmd(cmdLine *char)
Wrapper:
PROCEDURE OExecSysCmd(p_SysCmd in char)
IS EXTERNAL
NAME "OExecSysCmd"
LIBRARY demolib;
Thanks in advance
DannysHi Russ,
with "invoke an external dll" I mean that I have to wite a log file to register my fdk client events and to do this I have to use an external dll wich exposes some functions to write to a common log file. I have imported the external dll in my client project and at the beginning of client code I have included the dll header file:
#include "LogDll.h"
Then I've tried to invoke a LogDll function (not within F_ApiInitialize (), but in a custom dialog box event):
int retval=LogDllFunction();
The code compiles, but if I start FM, I receive the message error. If I comment the line above, FM and my client start normally.
Thanks,
Stefano -
Firefox v33 not supported for firebreath dll function?
''locking a a duplicate of - https://support.mozilla.org/en-US/questions/1031785''
Hi,
i have call a firebreath default echo function in my firefox extension using firefox v33 browser. its not working, it returns type error:echo is not a function. But the same function successfully called in firefox v28. So whats the actual problem? why firebreath dll function not supported in firefox v33?
note In echo function, i have create a messagebox to display while calling in that function. it shows in v28 but in v33 exception throws like type error:echo is not a function.
Regards
Bala
''put a space after the periods as it was creating links.''
----Does Firefox find that element if you run this code in the Web Console (Firefox/Tools > Web Developer)?
<pre><nowiki>ngPluginObj = document.getElementById('myfirebreath');</nowiki></pre>
Do you see the add-on enabled in "Firefox/Tools > Add-ons" -
Question on the parameter type of DLL functions
Question on the parameter type of DLL functions
I am trying to develop an interface to control a laser with LV8.2 I am planing to use the VI “Call Library Function Node” to call the DLL and set the exact same parameters of functions in the DLL.
According to the DLL manual of the laser, there are six functions. One of the prototypes is: function getstatuspointer : pointer. I don't know how to set this parameter for the function. Is there anyone who can give some hints? Thanks!
BTW :The following is a description of the function:
This function returns a 32 bit pointer to the STATUS data structure (Tstatusrec). In the 32 bit DLL, every application is using its own copy of the data structure (local
memory). The data structure is a packed structure. "packed" means that the fields in the structure are not aligned on word or double-word boundaries.
Tstatusrec = packed record
size : word;
initstat : byte;
queuefill : byte;
anzapp16 : word; (not used)
anzapp32 : word;
anzdock16 : word; (not used)
anzdock32 : word;
dll16ver : tchararray; (not used)
dll32ver : tchararray;
excimerver : tchararray;
excimer : TExcimerStatus;
end;Hi Jack,
This is a good starting point when using Call Library Function node. Check out this Help Page
Van L
NI Applications Engineer -
How to pass a struct to a DLL function and accessing it in another VI
Hi friends,
I am new to labview. I need to create a demo program in labview ,for displaying image from our own image capturing system. We have a DLL ( build in VC++) containing functions for capturing image from our system. Now I need to create a VI library for some of functions in DLL and Create a Demo program using those created subvi library . I used "Call Function node" and created some of subvi's.
Some of our DLL functions need to pass struct pointers. Our function prototype will be similar to the following function.
__declspec(dllexport) int __stdcall Initialize( unsigned char *imagebuffer,struct config *Configuration);
The passed struct is similar to
struct config
double val1[3];
unsigned short val2;
bool val3;
bool val4[3];
unsigned char val5;
unsigned char val6[3];
bool val7[26];
For passing "unsigned char *imagebuffer" I initialized array with "Numeric constant " and set the size of the array and send to the function.
The problem here is, I used this array in one of the subvi.
How can I use the returned imagebuffer array in my main demo program. How to connect the image array to subvi "Connecter Pane"
And which control can I use to display the image. The image data I get is form of 1-D Array .
The second problem is,
For passing the structure, I used "Bundle " and filled the bundle with all the datatypes as in my struct and passed to the function. Is it correct ? How to access this bundle after returned from function in another Vi. ie.) How to connect this bundle to the connter pane ?
Thanks for your valuable suggestions.
aajjf.
Message Edited by aajjf on 04-19-2007 05:34 AMaajjf wrote:
Hi friends,
I am new to labview. I need to create a demo program in labview ,for displaying image from our own image capturing system. We have a DLL ( build in VC++) containing functions for capturing image from our system. Now I need to create a VI library for some of functions in DLL and Create a Demo program using those created subvi library . I used "Call Function node" and created some of subvi's.
Some of our DLL functions need to pass struct pointers. Our function prototype will be similar to the following function.
__declspec(dllexport) int __stdcall Initialize( unsigned char *imagebuffer,struct config *Configuration);
The passed struct is similar to
struct config
double val1[3];
unsigned short val2;
bool val3;
bool val4[3];
unsigned char val5;
unsigned char val6[3];
bool val7[26];
For passing "unsigned char *imagebuffer" I initialized array with "Numeric constant " and set the size of the array and send to the function.
The problem here is, I used this array in one of the subvi.
How can I use the returned imagebuffer array in my main demo program. How to connect the image array to subvi "Connecter Pane"
And which control can I use to display the image. The image data I get is form of 1-D Array .
The second problem is,
For passing the structure, I used "Bundle " and filled the bundle with all the datatypes as in my struct and passed to the function. Is it correct ? How to access this bundle after returned from function in another Vi. ie.) How to connect this bundle to the connter pane ?
Thanks for your valuable suggestions.
aajjf.
Message Edited by aajjf on 04-19-2007 05:34 AM
You say nothing about how your cluster looks but I'm afraid you did the standard error here and placed arrays in it. That is not what the C structure is representing for several reasons.
First fixed size arrays in C are inlined inside a structure, so are not a pointer but for the case of your val1 element three doubles.
Second although not relevant here because of above point: LabVIEW arrays are not the same as C arrays. LabVIEW uses a pointer to a pointer and has the size of the array in elements prepended to the array data. C simply uses a pointer and all the rest is the programmers sorrow. The Call Library Node does convert the top level element of variables you pass according to the type configuration of that parameter but does no conversion of internal elements at all. So passing clusters with anything like arrays or strings is always wrong unless the DLL is aware of the specific datatypes LabVIEW uses.
Last but not least you can end up with alignment issues. Elements in structures are aligned by every C compiler to a certain value. This value can be defined by the programmer in the project settings or for Visual C through #pragma pack() statements in the C code. The alignment rule says that an variable is aligned to the smaller of the two values that are either a multiple of the variable element size or the alignment setting. Most 32bit code nowadays uses 8 bit default alignment but LabVIEW always uses 1 byte. In your case there is nothing to observe since the large variables are at the beginning. Otherwise you might have had to insert filler elements in the LabVIEW cluster.
One last thing bool is a C++ type only. Its size is 1 byte and incidentially this is the same LabVIEW uses for Booleans.
Rolf Kalbermatter
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
Receive a cluster from a dll function
Hi,
I have a function in a DLL which returns a C struct. I want to know how can I receive a cluster from a CLFN?
struct info:
struct typedata{
int a;
int b;
const char * c;
int d;
int e;
}data;
function call:
const typedata * hostinfo(int param);
Solved!
Go to Solution.LVCoder wrote:
Thanks a lot both of you for letting me know about my dumb assumption that 2 different processes can use the same memory space.
Anyways, I figured out the problem with my code that was reading the double value.
the DLL function returns the address of the struct which has 5 elements.
struct test {
int a;
int b;
int c;
double d;
double e;
suppose the address I receive is 10
address of test->a = 10
address of test->b = 14
address of test->c = 18
address of test->d = 26 // I was refering it as address 22. but I forgot that I was on a 64 bit machine and that the OS will allocate the whole memory address for a double and won't utilize the 4 bytes left in the previous memory address.
thanks!
That has nothing to do with the bitness of your CPU or the OS. It is only dependent on the compiler alignment setting when you compile your DLL. Microsoft Compilers use a default alignment of 8 bytes. That means every variable or element inside a cluster will be aligned to the smaller one of either its own size or the default alignment.
You can change the compiler alignment either with a compiler switch or an explicit #pragma iin your source code where you declare the variables or structure typedefs.
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
Cluster array to c structure in DLL
Hello,
I have a problem which I am stuck at so I would really appreciate any help.
I have this function that i need to access in Labview.
ViStatus _VI_FUNC Ki_GetSystemInfo (ViSession instrumentHandle,
void *systemInfo);
Now the structure for systeminfo is as follows:
typedef struct _SYSTEM_INFO
char pchModelNum[MODEL_NUM_LEN];
char pchSerialNum[SERIAL_NUM_LEN];
char pchSysSoftwareVer[SOFTVER_LEN];
char pchPlatformVer[PLATVER_LEN];
char pchOpSystemVer[SYSTVER_LEN];
int bCardType[MAX_SLOTS]; // Enum slot_types
} systeminfo;
When i use the call Library Node function to access the above function what
should be mine
input and out paramteres. I tries making cluster of 5 st
rings and an array
of integers
It doesnt seem to work. Any help shall be appreciated.
PremalHi Premal,
Try to use arrays of [U8] instead of strings. Also, pay attention to INT - is OS dependent (assuming that you are using win9x/NT/2000, use [I32]). If you try with strings, be sure that the input string contains enough characters to store the result.
Hope this helps
p.s.: take a look on those articles mentioned in "cluster array to c structure in DLL" [http://exchange.ni.com/servlet/ProcessRequest?RHIVEID=101&RPAGEID=137&HOID=506500000005000000C05C0000&HTHREAD=000023744&UCATEGORY_0=_49_%24_6_&UCATEGORY_S=0] -
Proper security structure for Single Sign on Server
We are all used to how we design security structure for vCenter Server if you have had an existing VMware environment prior to 5.1. Who should have administrative privileges in vCenter Server, what roles, permissions, and so on should be assigned to what users and groups - these questions have already been addressed in our current configuration.
Now Single Sign on introduces a significant new point of consideration for determining issues of access and authentication.
I'd like to get some ideas on how this should be handled. For example, should previous VMware administrators by definition become Single Sign on Administrators? Should the administrators of the Active Directory domain now start to get involved with the Single Sign on Server?
For example, Single Sign on now forces VMware administrators to configure things like:
-Password Complexity Policy for SSO
-Password Expiration for SSO
-Lockout Policy
We already probably have these things tightly controlled in AD and locked down with group policy, but you can't apply group policy directly to an SSO server and make it receive a GPO from Active Directory. (You can make the Windows OS that SSO is running on have a GPO applied, but it won't configure SSO itself, just the OS).
VMware admins are looking at a new set of questions relating to authentication and authorization. Someone has to have written something or will be writing something to help us get the big picture of what is changing with SSO if anything and how we need to look at SSO from a security design and best practices.
Should we just make existing vCenter Server admins SSO admins or do we need to take a step back and reconsider?Hello,
Actually, yes. SSO is fairly robust in 5.5. It has a few limitations around email of expired passwords, but that is mainly because some people do not use them. I use SSO to provide the usernames and passwords for all my VMware vCenter and related product service accounts. I.e. an account for vdp, Horizon, vCops, Log Insight, etc. This is more about keeping systems segregated once more with no real need for AD for services. But AD via SSO is used by users.
Read the documentation, and determine how SSO fits into your current password policy and take a long hard look at your virtualization management environment. Is there a 1 service account per service talking directly to vCenter? If not, SSO can help you implement that. The key is to match its functionality to your security policy.
Best regards,
Edward L. Haletky
VMware Communities User Moderator, VMware vExpert 2009, 2010, 2011,2012,2013,2014
Author of the books 'VMWare ESX and ESXi in the Enterprise: Planning Deployment Virtualization Servers', Copyright 2011 Pearson Education. 'VMware vSphere and Virtual Infrastructure Security: Securing the Virtual Environment', Copyright 2009 Pearson Education.
Virtualization and Cloud Security Analyst: The Virtualization Practice, LLC -- vSphere Upgrade Saga -- Virtualization Security Round Table Podcast -
Trying to create a Histogram type/object for aggregate functions
Hi,
I am trying to create an aggregate function that will return a histogram
type.
It doesn't have to be an object that is returned, I don't mind returning
a string but I would like to keep the associative array (or something
else indexed by varchar2) as a static variable between iterations.
I started out with the SecondMax example in
http://www.csis.gvsu.edu/GeneralInfo/Oracle/appdev.920/a96595/dci11agg.htm#1004821
But even seems that even a simpler aggregate function like one strCat
below (which works) has problems because I get multiple permutations for
every combination. The natural way to solve this would be to create an
associative array as a static variable as part of the Histogram (see
code below). However, apparently Oracle refuses to accept associate
arrays in this context (PLS-00355 use of pl/sql table not allowed in
this context).
If there is no easy way to do the histogram quickly can we at least get
something like strCat to work in a specific order with a "partition by
... order by clause"? It seems that even with "PARALLEL_ENABLE"
commented out strCat still calls merge for function calls like:
select hr,qtr, count(tzrwy) rwys,
noam.strCat(cnt) rwycnt,
noam.strCat(tzrwy) config,
sum(cnt) cnt, min(minscore) minscore, max(maxscore) maxscore from
ordrwys group by hr,qtr
Not only does this create duplicate entries in the query result like
"A,B,C" and "A,C,B" it seems that the order in rwycnt and config are not
always the same so a user can not match the results based on their
order.
The difference between my functions and functions like sum and the
secondMax demonstrated in the documentation is that secondMax does not
care about the order in which it gets its arguments and does not need to
maintain an ordered set in order to return the correct results. A good
example of a built in oracle function that does care about all its
arguments and probably has to maintain a similar data structure to the
one I want is the PERCTILE_DISC function. If you can find the code for
that function (or something like it) and forward a reference to me that
in itself would be very helpful.
Thanks,
K.Dingle
CREATE OR REPLACE type Histogram as object
-- TYPE Hist10 IS TABLE OF pls_integer INDEX BY varchar2(10),
-- retval hist10;
-- retval number,
retval noam.const.hist10,
static function ODCIAggregateInitialize (sctx IN OUT Histogram)
return number,
member function ODCIAggregateIterate (self IN OUT Histogram,
value IN varchar2) return number,
member function ODCIAggregateTerminate (self IN Histogram,
returnValue OUT varchar2,
flags IN number) return number,
member function ODCIAggregateMerge (self IN OUT Histogram,
ctx2 IN Histogram) return number
CREATE OR REPLACE type body Histogram is
static function ODCIAggregateInitialize(sctx IN OUT Histogram) return
number is
begin
sctx := const.Hist10();
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT Histogram, value IN
varchar2)
return number is
begin
if self.retval.exist(value)
then self.retval(value):=self.retval(value)+1;
else self.retval(value):=1;
end if;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN Histogram,
returnValue OUT varchar2,
flags IN number)
return number is
begin
returnValue := self.retval;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT Histogram,
ctx2 IN Histogram) return number is
begin
i := ctx2.FIRST; -- get subscript of first element
WHILE i IS NOT NULL LOOP
if self.retval.exist(ctx2(i))
then self.retval(i):=self.retval(i)+ctx2.retval(i);
else self.retval(value):=ctx2.retval(i);
end if;
i := ctx2.NEXT(i); -- get subscript of next element
END LOOP;
return ODCIConst.Success;
end;
end;
CREATE OR REPLACE type stringCat as object
retval varchar2(16383), -- concat of all value to now varchar2, --
highest value seen so far
static function ODCIAggregateInitialize (sctx IN OUT stringCat)
return number,
member function ODCIAggregateIterate (self IN OUT stringCat,
value IN varchar2) return number,
member function ODCIAggregateTerminate (self IN stringCat,
returnValue OUT varchar2,
flags IN number) return number,
member function ODCIAggregateMerge (self IN OUT stringCat,
ctx2 IN stringCat) return number
CREATE OR REPLACE type body stringCat is
static function ODCIAggregateInitialize(sctx IN OUT stringCat) return
number is
begin
sctx := stringCat('');
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT stringCat, value IN
varchar2)
return number is
begin
if self.retval is null
then self.retval:=value;
else self.retval:=self.retval || ',' || value;
end if;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN stringCat,
returnValue OUT varchar2,
flags IN number)
return number is
begin
returnValue := self.retval;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT stringCat,
ctx2 IN stringCat) return number is
begin
self.retval := self.retval || ctx2.retval;
return ODCIConst.Success;
end;
end;
CREATE OR REPLACE FUNCTION StrCat (input varchar2) RETURN varchar2
-- PARALLEL_ENABLE
AGGREGATE USING StringCat;GraphicsConfiguration is an abstract class. You would need to subclass it. From the line of code you posted, it seems like you are going about things the wrong way. What are you trying to accomplish? Shouldn't this question be posted in the Swing or AWT forum?
-
Error when calling a DLL function
Hi,
I am using external C++ code with labView. One of the DLL functions I use serves to call files. The directory and the name of the file is is passed as a parameter for this function. When the VI is running and arrives at this function (I use the Calling Library Function Node tool), the following message is displayed:
ERREUR de type class boost::filesystem::filesystem_error.
boost::filesystem:ath: invalid name "D:\Documents Johan\Johan\Stitching\Fichiers de mesure\front parfait\13z2" in path: "D:\Documents Johan\Johan\Stitching\Fichiers de mesure\front parfait\13z2"
I do not know why this message is sent to me.
Thanks for your answer
JFHello,
How are you passing the file path to the DLL -- are you passing it as a
string? If you are passing at as a string, I would do some basic
console output to make sure that your DLL is receiving the file path
corectly as a string and perform your appropriate C++ function in your
DLL. If the error is occuring with passing the file path you
might want to check out the links below for a little more information
on this.
http://zone.ni.com/devzone/conceptd.nsf/webmain/7d6a20fe02edbf318625690700704cf3#4
http://digital.ni.com/public.nsf/websearch/4E9234BA4C7C4ABE86256E3C0074760F?OpenDocument
http://digital.ni.com/public.nsf/websearch/3B994675B17C654A86256FDD00754DD2?OpenDocument
Hope this helps,
Travis M
NI
Travis M
LabVIEW R&D
National Instruments
Maybe you are looking for
-
In lsmw im not able to get any our put in the step read data it is showing me error not able to read file. i check with the files in apllication server as well as the path i specified in lsmw .they both are same with out any case sensitive. step s
-
I'm trying to understand the difference between Photoshop Elements and Lightroom software.
Does one have things the other does not?
-
Call workflow from ABAP program
created a zbusiness object (ZPRODH)with one key field product hierarchy, one attribute level number and one method display. I tested that zobject and using this object created workflow to display product hierarchy ,it is displaying it. now I have to
-
W520 LED backlight and LCD quality
First of all, thinkpads are the best notebooks, really. But please, stop using pulse-width modulation to dim brightness of LED-backlit screens, it's flickers when using screen at any brightness other than full. It's really eye-straining! Another issu
-
Adding User attributes in Request details
Hi, I want to add user details like Manager Name in addition to default attributes to approval request for a user. Can you please tell me how can I do this. Thanks In Advance